今回はStream APIを用いて、コレクションから指定した条件を満たす要素を取り出したり、変換してみたいと思います。
Stream APIの使い方
Stream APIとラムダ式を使うことで、 「コレクションから指定した条件を満たしている要素を取り出す」といった様な処理を分かりやすく記述することができます。
実際のStream APIを使う流れとして、
- コレクションからstreamを取得する
- streamに対して中間操作を行う
- 終端操作(forEach)でstreamの要素に対して1つずつ処理を行う
といった方法でコレクションへの処理を行います。記述例として、
//Stream APIの記述例 List<Integer> list = Arrays.asList(1, 2, 3, 4); list.stream() // streamを取得する .filter(i -> i % 2 == 0) // 中間操作を行う .forEach(i -> System.out.println(i)); // 終端操作を行う
のように書きます。上のコードでは「1,2,3,4」のリストからfilterメソッドで偶数(2で割った余りが0)の要素を取り出しています。
中間操作には、「filterメソッド」「mapメソッド」が良く使われています。以下にそれぞれの記述例を紹介します。
filterメソッド
filterメソッドは条件を指定してフィルタリングを行うことができます。記述例は以下の通りです。
//filterメソッドの記述例 .filter(i -> i % 2 == 0)
ここで、引数でラムダ式を指定することで「->」の右側の式が「true」になるような「i」を取り出しています。
mapメソッド
mapメソッドは要素を指定したものに変換することができます。記述例は以下の通りです。
//mapメソッドの記述例 .map(i -> i * 2)
ここで、引数でラムダ式を指定することで「->」の右側の式になるように「i」を置き換えています。
forEachメソッド
forEachメソッドは終端処理に用いられます。要素を1つずつ取り出して指定の処理を行います。記述例は以下の通りです。
//forEachメソッドの記述例 .forEach(i -> System.out.println(i));
「i」を1つずつ取り出してsysout文で出力しています。
Stream APIの使用例
Stream APIの使用例をサンプルコードで示します。
サンプルコード
サンプルコードを以下に示します。
import java.util.Arrays; import java.util.List; public class StreamAPITest { public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); list.stream() .filter(i -> i % 2 == 0) .forEach(i -> System.out.print(i + " ")); System.out.println(); list.stream() .map(i -> i * 10) .forEach(i -> System.out.print(i + " ")); System.out.println(); list.stream() .filter(i -> i % 2 == 0) .map(i -> i * 10) .forEach(i -> System.out.print(i + " ")); System.out.println(); } }
出力結果
サンプルコードの出力結果を以下に示します。
2 4 6 8 10 10 20 30 40 50 60 70 80 90 100 20 40 60 80 100
まとめ
今回やったことのまとめです。
ポイント
- Stream APIでコレクションへ処理を施せる
- 要素の処理にはfilterメソッドやmapメソッドを使い、foreachメソッドで出力できる
- メソッドの引数にはラムダ式を用いる
以上がStream APIの紹介になります。