Java8-streams
Java 8-ストリーム
ストリームは、Java 8で導入された新しい抽象レイヤーです。 ストリームを使用すると、SQLステートメントと同様の宣言的な方法でデータを処理できます。 たとえば、次のSQLステートメントを考えます。
上記のSQL式は、開発者の側で計算を行うことなく、給与を受け取る従業員の最大詳細を自動的に返します。 Javaのコレクションフレームワークを使用して、開発者はループを使用し、繰り返しチェックする必要があります。 もう1つの懸念は効率です。マルチコアプロセッサは簡単に利用できるため、Java開発者はエラーが発生しやすい並列コード処理を作成する必要があります。
このような問題を解決するために、Java 8は、開発者がデータを宣言的に処理し、特定のコードを記述することなくマルチコアアーキテクチャを活用できるストリームの概念を導入しました。
ストリームとは何ですか?
ストリームは、集約操作をサポートするソースからのオブジェクトのシーケンスを表します。 以下は、ストリームの特性です-
- 要素のシーケンス-ストリームは、特定のタイプの要素のセットを順次に提供します。 ストリームは、要求に応じて要素を取得/計算します。 要素を保存することはありません。
- ソース-ストリームは、コレクション、配列、またはI/Oリソースを入力ソースとして受け取ります。
- 集計操作-Streamは、フィルター、マップ、制限、削減、検索、一致などの集計操作をサポートします。
- パイプライン-ストリーム操作のほとんどは、結果をパイプライン化できるようにストリーム自体を返します。 これらの操作は中間操作と呼ばれ、その機能は入力を受け取り、処理し、出力をターゲットに返すことです。 collect()メソッドは、通常、パイプライン操作の最後に存在してストリームの終わりを示す端末操作です。
- 自動反復-明示的な反復が必要なコレクションとは対照的に、ストリーム操作は提供されたソース要素に対して内部的に反復を行います。
ストリームを生成する
Java 8では、CollectionインターフェイスにはStreamを生成する2つのメソッドがあります。
- * stream()*-コレクションをソースとする順次ストリームを返します。
- * parallelStream()*-コレクションをソースとする並列ストリームを返します。
forEach
ストリームは、ストリームの各要素を反復処理する新しいメソッド「forEach」を提供します。 次のコードセグメントは、forEachを使用して10個の乱数を印刷する方法を示しています。
map
「map」メソッドは、各要素を対応する結果にマッピングするために使用されます。 次のコードセグメントは、mapを使用して一意の数値の正方形を印刷します。
フィルタ
「フィルター」メソッドは、基準に基づいて要素を削除するために使用されます。 次のコードセグメントは、フィルターを使用して空の文字列の数を出力します。
限定
「制限」メソッドは、ストリームのサイズを縮小するために使用されます。 次のコードセグメントは、制限を使用して10個の乱数を印刷する方法を示しています。
ソート済み
「ソート済み」メソッドは、ストリームのソートに使用されます。 次のコードセグメントは、ソートされた順序で10個の乱数を印刷する方法を示しています。
並列処理
parallelStreamは、並列処理用のストリームの代替です。 parallelStreamを使用して空の文字列の数を出力する次のコードセグメントを見てください。
順次ストリームと並列ストリームを切り替えるのは非常に簡単です。
コレクター
コレクターは、ストリームの要素に対する処理結果を結合するために使用されます。 コレクターを使用して、リストまたは文字列を返すことができます。
統計
Java 8では、ストリーム処理の実行中にすべての統計を計算する統計コレクターが導入されました。
ストリームの例
C:\> JAVAなどで選択した任意のエディターを使用して、次のJavaプログラムを作成します。
Java8Tester.java
結果を確認する
次のように javac コンパイラを使用してクラスをコンパイルします-
次のようにJava8Testerを実行します-
それは次の結果を生成する必要があります-