Skip to content
閲覧中:
9. 終端操作

9. 終端操作

Javaの終端操作(Terminal Operations)の主要なものを、実際に動かせるサンプルコードでまとめました。

コピー&ペーストして、それぞれの挙動の違いを確認してみてください。


1. コレクション・配列にまとめる (collect, toArray)

抽出した結果を、後で使うために変数に保存する最も一般的な方法です。

Java
import java.util.*;
import java.util.stream.Collectors;

List<String> names = Arrays.asList("apple", "banana", "apricot", "cherry");

// Listにまとめる
List<String> listResult = names.stream()
    .filter(s -> s.length() > 5)
    .collect(Collectors.toList()); 

// Setにまとめる(重複が消える)
Set<String> setResult = names.stream()
    .collect(Collectors.toSet());

// 配列に変換する
String[] arrayResult = names.stream()
    .toArray(String[]::new);

2. 判定系 (anyMatch, allMatch, noneMatch)

「条件に合うものが含まれているか?」を boolean で即座に返します。

Java
boolean hasApple = names.stream().anyMatch(s -> s.equals("apple"));   // true
boolean allStartWithA = names.stream().allMatch(s -> s.startsWith("a")); // false
boolean noneStartWithZ = names.stream().noneMatch(s -> s.startsWith("z")); // true

System.out.println("リンゴはある?: " + hasApple);

3. 検索系 (findFirst, findAny)

条件に一致する「中身」を1つ取り出します。

Java
// "a"で始まる最初の要素を取得
Optional<String> result = names.stream()
    .filter(s -> s.startsWith("a"))
    .findFirst();

// Optionalなので、値がある時だけ処理する
result.ifPresent(s -> System.out.println("見つかった: " + s));

4. 統計・集計系 (count, reduce)

数値としての結果や、1つの凝縮された値を作ります。

Java
// 5文字以上の単語を数える
long count = names.stream()
    .filter(s -> s.length() >= 6)
    .count();

// 全ての文字列をカンマ区切りで合体させる (reduce)
Optional<String> joined = names.stream()
    .reduce((s1, s2) -> s1 + ", " + s2);

joined.ifPresent(System.out::println); // apple, banana, apricot, cherry

5. 繰り返し処理 (forEach)

結果を何かに代入せず、その場で使い切る(印字など)場合です。

Java
names.stream()
    .filter(s -> s.contains("a"))
    .forEach(s -> System.out.println("出力: " + s));

まとめ:戻り値の型を意識しよう

終端操作を選ぶときは、**「最終的に何が欲しいか」**で決めます。

欲しいもの 使う終端操作
加工された新しいリスト .collect(Collectors.toList())
YES か NO か .anyMatch() / .allMatch()
見つかった中身の1つ .findFirst()
合計数や件数 .sum() / .count()
ただ画面に出したいだけ .forEach()

次のステップ

これで終端操作の基本はバッチリです! さらにステップアップするなら、**「グループ分け(appleとapricotをAグループにする、など)」**ができる Collectors.groupingBy という強力な終端操作がありますが、見てみますか?