Javaでストリームする

Javaでストリームする

Java 8 で導入された Stream API は、オブジェクトのコレクションを処理するために使用されます。 Java のストリームは、パイプライン化して目的の結果を生成できるさまざまなメソッドをサポートするオブジェクトのシーケンスです。

Java でのストリームの使用

Java での Stream の使用法を以下に示します。

  1. ストリーム API は、オブジェクトのコレクションを表現および処理する方法です。
  2. フィルタリング、マッピング、削減、並べ替えなどの操作を実行できるようにします。

Java ストリームを作成するにはどうすればよいですか?

Java ストリームの作成は、Java ストリームの機能を検討する前の最も基本的な手順の 1 つです。以下は、Java Stream を宣言する方法の構文です。

構文

Stream stream; 

ここで、 T は、宣言に応じてクラス、オブジェクト、またはデータ型のいずれかになります。

Javaストリームの機能

Javaストリームの特徴は以下の通りです。

  • ストリームはデータ構造ではなく、コレクション、配列、または I/O チャネルから入力を受け取ります。
  • ストリームは元のデータ構造を変更せず、パイプライン メソッドに従って結果を提供するだけです。
  • 各中間操作は遅延実行され、結果としてストリームを返すため、さまざまな中間操作をパイプライン化できます。端末操作はストリームの終わりをマークし、結果を返します。

ストリームに対するさまざまな操作

ストリームには 2 種類の操作があります。

  1. 中間操作
  2. 操作の終了

中間操作

Javaストリーム操作

中間操作は、複数のメソッドが連続して連鎖する操作のタイプです。

中間操作の特徴

  1. メソッドは連鎖していきます。
  2. 中間操作は、ストリームを別のストリームに変換します。
  3. これにより、あるメソッドがデータをフィルタリングし、処理後に別のメソッドに渡すフィルタリングの概念が可能になります。

Java ストリームの利点

以下に示すように、Java で Stream を使用することでいくつかの利点があります。

  • ストレージなし
  • 関数のパイプライン
  • 怠惰
  • 無限にできる
  • 並列化可能
  • コレクション、配列、ファイル行、ストリーム内のメソッド、IntStream などから作成できます。

重要な中間操作

以下に示すいくつかの中間操作があります。

1.マップ()

map メソッドは、指定された関数をこのストリームの要素に適用した結果で構成されるストリームを返すために使用されます。

List number = Arrays.asList(2,3,4,5); List square = number.stream().map(x->x*x).collect(Collectors.toList());> 

2.フィルター()

filter メソッドは、引数として渡された述語に従って要素を選択するために使用されます。

List names = Arrays.asList('Reflection','Collection','Stream'); List result = names.stream().filter(s->s.startsWith('S')).collect(Collectors.toList());>>'   

3.sorted()

ストリームをソートするには、sorted メソッドが使用されます。

端末の操作

ターミナル オペレーションは、結果を返すオペレーションのタイプです。これらの操作はそれ以上処理されず、最終結果値を返すだけです。

重要な端末操作

以下に説明するターミナル操作がいくつかあります。

1.収集()

collect メソッドは、ストリームに対して実行された中間操作の結果を返すために使用されます。

List number = Arrays.asList(2,3,4,5,3); Set square = number.stream().map(x->x*x).collect(Collectors.toSet());> 

2.forEach()

forEach メソッドは、ストリームのすべての要素を反復処理するために使用されます。

List number = Arrays.asList(2,3,4,5); number.stream().map(x->x*x).forEach(y->System.out.println(y));>>'   

3.reduce()

Reduce メソッドは、ストリームの要素を単一の値に減らすために使用されます。 reduce メソッドは BinaryOperator をパラメータとして受け取ります。

ここでは、ans 変数に初期値として 0 が代入され、それに i が加算されます。

注記: 中間操作は遅延評価の概念に基づいて実行され、すべてのメソッドが次のメソッドに移動する前に固定値 (端末操作) を返すことが保証されます。

Javaストリームの例

ジャワ




// Java program to demonstrate> // the use of stream in java> import> java.util.*;> import> java.util.stream.*;> class> Demo {> > public> static> void> main(String args[])> > {> > // create a list of integers> > List number = Arrays.asList(> 2> ,> 3> ,> 4> ,> 5> );> > // demonstration of map method> > List square> > = number.stream()> > .map(x ->x * x)>>' ,> 'Collection'> ,> 'Stream'> );> > // demonstration of filter method> > List result> > = names.stream()> > .filter(s ->s.startsWith(>> 'S'> ))> > .collect(Collectors.toList());> > > System.out.println(result);> > // demonstration of sorted method> > List show> > = names.stream()> > .sorted()> > .collect(Collectors.toList());> > > System.out.println(show);> > // create a list of integers> > List numbers> > = Arrays.asList(> 2> ,> 3> ,> 4> ,> 5> ,> 2> );> > // collect method returns a set> > Set squareSet> > = numbers.stream()> > .map(x ->x * x)>>' ==> 0> )> > .reduce(> 0> , (ans, i) ->ans + i);>>'

出力

[4, 9, 16, 25] [Stream] [Collection, Reflection, Stream] [16, 4, 9, 25] 4 9 16 25 6 

Java Streamの注意点・注意点

  1. ストリームは、ソースと、その後に結合された (パイプライン化された) 0 個以上の中間メソッドと、記述されたメソッドに従ってソースから取得したオブジェクトを処理する終端メソッドで構成されます。
  2. ストリームは、オブジェクトの元の値を変更せずに、パイプライン メソッドに従って要素を計算するために使用されます。