閲覧中:
Consumer

Consumer

Java Gold の試験において、Predicate と並んで非常によく出題されるのが Consumer です。 Predicate が「判定(booleanを返す)」だったのに対し、Consumer はその名の通り「消費(Consumer)」するだけで、何も返さない(void) のが最大の特徴です。 1. Consumer の基本構造 Consumer は、1つの引数を受け取り、何らかの処理(副作用)を行いますが、戻り値は持ちません。 * 抽象メソッド: void accept(T t) * パッケージ: java.util.function コード例:

Java
最も身近な Consumer  System.out.println です
// ラムダ式での記述
Consumer<String> printer = s -> System.out.println(s);

// メソッド参照での記述(Gold試験ではこちらが多用されます)
Consumer<String> printerRef = System.out::println;

printerRef.accept("Hello Consumer!"); // 実行結果: Hello Consumer!

  1. メソッド合成:andThen Consumer には、複数の処理を順番に実行するためのデフォルトメソッド andThen が用意されています。
  2. andThen(Consumer<? super T> after): 現在の処理を実行した後、続けて after の処理を実行します。 コード例:
    Java
    Consumer<String> c1 = s -> System.out.print(s + " 1st ");
    Consumer<String> c2 = s -> System.out.println(s + " 2nd");
    
    Consumer<String> combined = c1.andThen(c2);
    combined.accept("Java"); 
    // 実行結果: Java 1st Java 2nd
    

試験のポイント: andThen の途中で例外が発生した場合、それ 以降の処理は実行されません。

  1. 派生インターフェース 引数の数や型に応じて、以下のバリエーションがあります。 引数が2つの場合:BiConsumer 2つの異なる型の引数を受け取ります。Map の forEach などでよ く使われます。
  2. メソッド: void accept(T t, U u)
Java
Map<Integer, String> map = Map.of(1, "Apple", 2, "Banana");
// BiConsumer を引数に取る
map.forEach((k, v) -> System.out.println(k + ":" + v));

プリミティブ型専用 ボクシングを避けるための専用インターフェースです。 * IntConsumer: void accept(int value) * LongConsumer: void accept(long value) * DoubleConsumer: void accept(double value) 4. 試験で狙われる「違い」の比較 Gold試験では、どの関数型インターフェースを使うべきかを問う問題が出ます。以下の表で整理しましょう。

インターフェース 引数 戻り値 主な用途
Predicate 1 boolean フィルタリング (filter)
Consumer 1 void 表示、保存、状態変更 (forEach)
Supplier 0 T データの提供 (Optional.orElseGet)
Function 1 R 型の変換 (map)
  1. 実戦イメージ Consumer は Stream API の peek メソッドや forEach メソッド で活躍します。
    Java
    List.of("a", "b", "c").stream()
        .peek(s -> System.out.println("Processing: " + s)) // 途中の確認 (Consumer)
        .map(String::toUpperCase)
        .forEach(System.out::println); // 最終処理 (Consumer)
    

Predicate と Consumer の違いはスッキリ整理できましたか? 次は、「値を生成する」役割の Supplier について解説しましょ うか?それとも、これまでの内容を元にした練習問題に挑戦して みますか?