Consumer
Java Gold の試験において、Predicate と並んで非常によく出題されるのが Consumer です。
Predicate が「判定(booleanを返す)」だったのに対し、Consumer はその名の通り「消費(Consumer)」するだけで、何も返さない(void) のが最大の特徴です。
1. Consumer の基本構造
Consumer
- メソッド合成:andThen Consumer には、複数の処理を順番に実行するためのデフォルトメソッド andThen が用意されています。
- andThen(Consumer<? super T> after): 現在の処理を実行した後、続けて after の処理を実行します。 コード例:
試験のポイント: andThen の途中で例外が発生した場合、それ 以降の処理は実行されません。
- 派生インターフェース 引数の数や型に応じて、以下のバリエーションがあります。 引数が2つの場合:BiConsumer
2つの異なる型の引数を受け取ります。Map の forEach などでよ く使われます。 - メソッド: 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) |
- 実戦イメージ Consumer は Stream API の peek メソッドや forEach メソッド で活躍します。
Predicate と Consumer の違いはスッキリ整理できましたか? 次は、「値を生成する」役割の Supplier について解説しましょ うか?それとも、これまでの内容を元にした練習問題に挑戦して みますか?