Java|StreamAPIを使ってコレクションの要素を操作する

StreamAPIを使ってコレクションの要素を操作するプログラミングの知識
プログラミングの知識

今回はStream APIを用いて、コレクションから指定した条件を満たす要素を取り出したり、変換してみたいと思います。

スポンサーリンク

Stream APIの使い方

Stream APIラムダ式を使うことで、 「コレクションから指定した条件を満たしている要素を取り出す」といった様な処理を分かりやすく記述することができます。

実際のStream APIを使う流れとして、

  1. コレクションからstreamを取得する
  2. streamに対して中間操作を行う
  3. 終端操作(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の紹介になります。

スポンサーリンク
Dim雑記
タイトルとURLをコピーしました