閲覧中:
Function

Function

Java Gold 試験において、Function は最も汎用性が高く、かつ応用範囲が広いインターフェースです。 Predicate が「判定」、Consumer が「消費」なら、**Function は「変換」**を担います。 1. Function の基本構造 Function は、型 T の引数を受け取り、型 R の結果を返します。 * 抽象メソッド: R apply(T t) * パッケージ: java.util.function * ジェネリクス: T は入力(Input)の型、R は結果(Result)の型 コード例: 文字列を受け取り、その長さを数値として返す例です。

Java
// <入力型, 戻り値型>
Function<String, Integer> lengthFunction = s -> s.length();

Integer length = lengthFunction.apply("Java Gold");
System.out.println(length); // 9

  1. メソッド合成:andThen と compose Function には、複数の関数を繋げるためのメソッドが2つあります。ここが Gold 試験の頻出ポイントです。
  2. andThen: 「A をしてから B をする」 (順方向)
  3. compose: 「B の前に A をする」 (逆方向) コード例で比較:
    Java
    Function<Integer, Integer> multiply = n -> n * 2;
    Function<Integer, Integer> add = n -> n + 3;
    
    // (5 * 2) + 3 = 13
    System.out.println(multiply.andThen(add).apply(5));
    
    // (5 + 3) * 2 = 16
    System.out.println(multiply.compose(add).apply(5));
    

試験対策: f1.andThen(f2) は f2(f1(x))、f1.compose(f2) は f1(f2(x)) となります。計算順序を問う問題がよく出ます。

  1. 引数が2つの場合:BiFunction 2つの異なる型(T, U)を受け取り、結果(R)を返します。
  2. メソッド: R apply(T t, U u) ```java

// 2つの文字列を連結して長さを返す BiFunction combinedLength = (s1, s2) -> (s1 + s2).length(); System.out.println(combinedLength.apply("Java", "Gold")); // 8 ```

  1. プリミティブ型の Function 効率化のために、多くのプリミティブ用インターフェースが存在します。命名規則に法則性があるので、これさえ覚えれば怖くありません。
  2. 入力がプリミティブ: IntFunction, DoubleFunction
  3. 戻り値がプリミティブ: ToIntFunction, ToDoubleFunction
  4. 両方がプリミティブ: IntToDoubleFunction など
  5. 入力と戻り値が同じ型: UnaryOperator (Function のサブクラス)
  6. 2つの同じ型を入力して同じ型を返す: BinaryOperator (BiFunction のサブクラス)
  7. 試験で問われるポイントまとめ
特徴 Function
役割 引数を別の値(または型)に変換する
メソッド apply
Stream APIでの活躍 map メソッドの引数として必須
注意点 andThen と compose の実行順序の違い

ステップアップ・クイズ これまで学んだ Predicate, Consumer, Function を組み合わせて考えてみましょう。 問題: 次の Stream 処理の ( ) に入る適切なインターフェース名は?

Java
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(引数なしで値を返す)を解説しますか?それとも、この辺りで実際の試験形式の練習問題に挑戦してみますか?