Skip to content
閲覧中:
3. 終端操作:基本(31-45)

3. 終端操作:基本(31-45)

Java Gold試験において、終端操作は「Streamの旅の終わり」です。ここで重要なのは、「戻り値の型(Optionalなのか、longなのか、voidなのか)」**と「短絡評価(途中で処理を終えるか)」**の2点です。

31番から45番までのサンプルコードを解説します。


31-35: 消費・配列・集約

Java
List<String> list = List.of("apple", "banana", "cherry");

// 31. forEach: 各要素に対してアクションを実行 (戻り値: void)
list.stream().forEach(System.out::println);

// 32. forEachOrdered: 並列ストリームでも順序を保証して処理
list.parallelStream().forEachOrdered(System.out::println);

// 33. toArray(): Object配列を返す
Object[] objArray = list.stream().toArray();

// 34. toArray(IntFunction): 指定した型の配列を返す
String[] strArray = list.stream().toArray(String[]::new);

// 35. reduce(BinaryOperator): 要素を1つにまとめる (戻り値: Optional)
Optional<String> joined = list.stream().reduce((a, b) -> a + "-" + b);
// 結果: Optional["apple-banana-cherry"]

36-40: 初期値あり集約・収集・判定

Java
// 36. reduce(identity, BinaryOperator): 初期値から計算 (戻り値: T型)
// 試験ポイント: 空のStreamでも初期値(0)が返るため、Optionalではない
int sum = Stream.of(1, 2, 3).reduce(0, (a, b) -> a + b); // 6

// 37. collect(Collector): ListやSetなどに変換
List<String> result = list.stream().collect(Collectors.toList());

// 38. min / max: 最小値・最大値を取得 (戻り値: Optional)
Optional<String> max = list.stream().max(Comparator.naturalOrder());

// 39. count(): 要素数を返す (戻り値: long)
long count = list.stream().filter(s -> s.length() > 5).count();

// 40. anyMatch: いずれかが条件に一致するか (短絡評価)
boolean match = list.stream().anyMatch(s -> s.startsWith("a")); // true

41-45: 判定・検索

Java
// 41. allMatch: すべてが条件に一致するか (短絡評価)
// 試験ポイント: 空のStreamに対して実行すると、常に true になる
boolean all = list.stream().allMatch(s -> s.length() > 2); // true

// 42. noneMatch: 1つも条件に一致しないか (短絡評価)
// 試験ポイント: 空のStreamに対して実行すると、常に true になる
boolean none = list.stream().noneMatch(s -> s.isEmpty()); // true

// 43. findFirst: 最初の要素を返す (戻り値: Optional)
Optional<String> first = list.stream().findFirst();

// 44. findAny: いずれかの要素を返す (戻り値: Optional)
// 試験ポイント: 並列処理(parallel)の場合、findFirstより高速
Optional<String> any = list.parallelStream().findAny();

// 45. iterator: Streamから従来のイテレータを取得
Iterator<String> it = list.stream().iterator();

💡 Java Gold 試験対策の急所

1. 短絡評価(Short-circuiting)

anyMatch, allMatch, noneMatch, findFirst, findAny, limit は、結果が確定した時点で残りの要素を調べません。

試験に出る例: list.stream().peek(System.out::println).anyMatch(s -> true); この場合、最初の1つが出力された時点で終了し、残りの要素に対する peek は実行されません。

2. Optionalを返すメソッド

min, max, findFirst, findAny, そして「初期値なし」の reduceOptional を返します。対して countsum(プリミティブ)は数値を返します。この違いは戻り値の型を問う問題で頻出です。

3. allMatch / noneMatch と空のStream

試験のひっかけとして有名です。

  • **空のStreamに対して allMatch は常に true**
  • **空のStreamに対して anyMatch は常に false** これは「条件に反するものが1つもない」から true と定義されているためです。

次は、試験の最難関である 「Collectorsクラス(46-65)」 (groupingByやtoMapなど)に進みますか?