Java Gold 向け 関数型インターフェースまとめ¶
Java Gold では
「どのメソッド名か」「引数の数」「戻り値」
を問われることが非常に多いです。
まずは分類で覚える¶
| 種類 | 役割 | 戻り値 |
|---|---|---|
| Supplier | 値を取り出す | あり |
| Consumer | 値を受け取るだけ | なし(void) |
| Predicate | 条件判定 | boolean |
| Function | 変換する | 別型 |
| Operator | 同じ型で計算 | 同じ型 |
一覧(覚えやすい版)¶
| インターフェース | 意味 | メソッド | イメージ |
|---|---|---|---|
Supplier<T> |
供給する | get() |
値を取り出す |
Consumer<T> |
消費する | accept(T) |
値を受け取る |
BiConsumer<T,U> |
2つ受け取る | accept(T,U) |
2個受け取る |
Predicate<T> |
条件判定 | test(T) |
条件チェック |
BiPredicate<T,U> |
2条件判定 | test(T,U) |
2個で判定 |
Function<T,R> |
型変換 | apply(T) |
変換する |
BiFunction<T,U,R> |
2入力変換 | apply(T,U) |
2つ使って変換 |
UnaryOperator<T> |
同型変換 | apply(T) |
1個加工 |
BinaryOperator<T> |
同型2項演算 | apply(T,T) |
2個計算 |
Runnable |
実行のみ | run() |
実行 |
Callable<V> |
戻り値あり実行 | call() |
実行+戻り値 |
Consumer は accept¶
覚え方¶
Consumer は「受け取る」ので
Predicate は test¶
覚え方¶
条件判定なので
Function / Operator は apply¶
覚え方¶
Supplier は get¶
覚え方¶
Runnable と Callable の違い¶
| Runnable | Callable | |
|---|---|---|
| 戻り値 | なし | あり |
| 例外 throws | 不可 | 可 |
| メソッド | run() |
call() |
Operator の正体¶
UnaryOperator¶
は実質:
と同じ。
つまり:
UnaryOperator の例¶
BinaryOperator の例¶
Bi が付く意味¶
| 名前 | 引数 |
|---|---|
| Consumer | 1個 |
| BiConsumer | 2個 |
| Function | 1個 |
| BiFunction | 2個 |
| Predicate | 1個 |
| BiPredicate | 2個 |
Java Gold 暗記用チートシート¶
値を返す系¶
| IF | メソッド |
|---|---|
| Supplier | get() |
| Function | apply() |
| UnaryOperator | apply() |
| BinaryOperator | apply() |
| Callable | call() |
戻り値なし系¶
| IF | メソッド |
|---|---|
| Consumer | accept() |
| BiConsumer | accept() |
| Runnable | run() |
boolean系¶
| IF | メソッド |
|---|---|
| Predicate | test() |
| BiPredicate | test() |
試験によく出る問題¶
Q1¶
答え¶
Q2¶
答え¶
Q3¶
答え¶
最短暗記法¶
| キーワード | メソッド |
|---|---|
| 供給 | get |
| 消費 | accept |
| 判定 | test |
| 変換 | apply |
| 実行 | run |
| 実行+戻り値 | call |
超重要ポイント¶
覚える順番¶
まずこの4つを覚えると、 Operator や Bi系も自然に覚えやすくなります。
語感で覚える方法¶
| 単語 | 意味 |
|---|---|
| get | 取得 |
| accept | 受け入れる |
| test | 試験する |
| apply | 適用する |
| run | 実行する |
| call | 呼び出す |
さらに試験向けポイント¶
Function¶
なら:
Predicate¶
なら:
Consumer¶
なら:
ラムダ式との対応¶
| IF | ラムダ例 |
|---|---|
| Supplier | () -> "abc" |
| Consumer | x -> System.out.println(x) |
| Predicate | x -> x > 0 |
| Function | x -> x.length() |
Gold試験で狙われやすい罠¶
Consumer に test は存在しない¶
Predicate に apply は存在しない¶
Supplier は引数なし¶
引数を書かない。
最後のまとめ¶
| IF | 引数 | 戻り値 | メソッド |
|---|---|---|---|
| Supplier | なし | あり | get() |
| Consumer | 1個 | void | accept() |
| Predicate | 1個 | boolean | test() |
| Function | 1個 | 任意 | apply() |
| UnaryOperator | 1個 | 同型 | apply() |
| BinaryOperator | 2個 | 同型 | apply() |
| Runnable | なし | void | run() |
| Callable | なし | あり | call() |