Webエンジニアのメモ帳

技術的な話を中心に書いています。

【Java】Streamの使い方

Java8から追加されたStreamという機能があります。

これは、ListなどのCollectionに対し、mapやfilterなどの中間操作を行い、collectなどの終端操作を行うというものです。

以下、使い方を説明します。

Listの各要素に同じ処理を行う

まずは、数字のリストの各要素に1を足してみます。

List<Integer> intList = new ArrayList<>();
intList.add(1);
intList.add(2);
intList.add(3);
intList.add(4);
intList.add(5);
List<Integer> list = intList.stream()
  .map(num -> num + 1)
  .collect(Collectors.toList());
System.out.println(list);

出力は以下のようになります。

[2, 3, 4, 5, 6]

collectの部分を書き換えれば、文字列で出力することも可能です。

List<Integer> intList = new ArrayList<>();
intList.add(1);
intList.add(2);
intList.add(3);
intList.add(4);
intList.add(5);

String listStr = intList.stream()
  .map(num -> String.valueOf(num + 1))
  .collect(Collectors.joining(","));
System.out.println(listStr);

出力は以下のようになります。

2,3,4,5,6

Listの特定の要素にだけ処理を行う

奇数の要素だけ抽出したい時は、filter()という中間操作を使います。

List<Integer> intList = new ArrayList<>();
intList.add(1);
intList.add(2);
intList.add(3);
intList.add(4);
intList.add(5);

List<Integer> listStr = intList.stream()
  .filter(num -> num % 2 == 1)
  .collect(Collectors.toList());
System.out.println(listStr);

奇数だけ出力されます。

[1, 3, 5]

さらにforEach()という終端操作を使えば、抽出した特定の要素に対してだけ出力などの処理を行うことも可能です。

List<Integer> intList = new ArrayList<>();
intList.add(1);
intList.add(2);
intList.add(3);
intList.add(4);
intList.add(5);

intList.stream()
  .filter(num -> num % 2 == 1)
  .forEach(num -> System.out.println(num));

奇数だけ出力されます。

1
3
5