Function
Java Gold 試験において、Function は最も汎用性が高く、かつ応用範囲が広いインターフェースです。
Predicate が「判定」、Consumer が「消費」なら、**Function は「変換」**を担います。
1. Function の基本構造
Function
- メソッド合成:andThen と compose Function には、複数の関数を繋げるためのメソッドが2つあります。ここが Gold 試験の頻出ポイントです。
- andThen: 「A をしてから B をする」 (順方向)
- compose: 「B の前に A をする」 (逆方向) コード例で比較:
試験対策: f1.andThen(f2) は f2(f1(x))、f1.compose(f2) は f1(f2(x)) となります。計算順序を問う問題がよく出ます。
- 引数が2つの場合:BiFunction
2つの異なる型(T, U)を受け取り、結果(R)を返します。 - メソッド: R apply(T t, U u) ```java
// 2つの文字列を連結して長さを返す
BiFunction
- プリミティブ型の Function 効率化のために、多くのプリミティブ用インターフェースが存在します。命名規則に法則性があるので、これさえ覚えれば怖くありません。
- 入力がプリミティブ: IntFunction
, DoubleFunction - 戻り値がプリミティブ: ToIntFunction
, ToDoubleFunction - 両方がプリミティブ: IntToDoubleFunction など
- 入力と戻り値が同じ型: UnaryOperator
(Function のサブクラス) - 2つの同じ型を入力して同じ型を返す: BinaryOperator
(BiFunction のサブクラス) - 試験で問われるポイントまとめ
| 特徴 | Function |
|---|---|
| 役割 | 引数を別の値(または型)に変換する |
| メソッド | apply |
| Stream APIでの活躍 | map メソッドの引数として必須 |
| 注意点 | andThen と compose の実行順序の違い |
ステップアップ・クイズ これまで学んだ Predicate, Consumer, Function を組み合わせて考えてみましょう。 問題: 次の Stream 処理の ( ) に入る適切なインターフェース名は?
List.of("Apple", "Banana", "Cherry").stream()
.filter( s -> s.startsWith("A") ) // ( 1 )
.map( s -> s.length() ) // ( 2 )
.forEach( System.out::println ); // ( 3 )
正解は (1) Predicate, (2) Function, (3) Consumer です。 次は、最後の主要インターフェースである Supplier(引数なしで値を返す)を解説しますか?それとも、この辺りで実際の試験形式の練習問題に挑戦してみますか?