Java 8 では、関数インターフェイス Function
が提供されており、このインターフェイスは、パラメータに対して何らかの操作を実行し、操作後の値を返すことを表します。このインターフェイスには、パラメータに対する操作を示す抽象メソッド apply
があります。
// Java Function 接口的定义 @FunctionalInterface public interface Function<T, R> { R apply(T t); default <V> Function<V, R> compose(Function<? super V, ? extends T> before) { Objects.requireNonNull(before); return (V v) -> apply(before.apply(v)); } default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) { Objects.requireNonNull(after); return (T t) -> after.apply(apply(t)); } static <T> Function<T, T> identity() { return t -> t; }
apply
メソッドは次のように使用されます:
Function<Integer, Integer> add = p -> p + 10; Integer result = add.apply(10); // 这里会输出 20,因为这个函数定义的操作时把参数加上 10 后返回 System.out.println(result);
compose
メソッドのパラメータも Function
オブジェクトです。 A の Function
で compose
メソッドを呼び出すときに、B の Function
オブジェクトを渡して、新しい Function
オブジェクトを取得します。 C. C の Function
オブジェクトの実装ロジックは、まず B の apply
メソッドを使用してパラメータを操作し、次に result を parameter# として使用します。 # A のこの Function オブジェクトの
apply メソッドに渡し、実行後に結果を返します。
addThen メソッドの原理は同様ですが、内部実行メソッドの順序が異なります。
Function<Integer, Integer> multiplyTen = a -> a * 10; Function<Integer, Integer> addTen = a -> a + 10; // 先增加 10,然后再乘 10,输出结果 110 Function<Integer, Integer> addTenThenMultiplyTen = multiplyTen.compose(addTen); System.out.println(addTenThenMultiplyTen.apply(1)); // 先乘 10,然后再加 10,输出结果 20 Function<Integer, Integer> multiplyTenAddTenThen = multiplyTen.andThen(addTen); System.out.println(multiplyTenAddTenThen.apply(1));関数インターフェイス インスタンス
public class CheckUtils { private static final Function<String, String> lengthCheck = params -> { if (params.length() > 100) { throw new RuntimeException("Length exceed max limit."); } return params; }; private static final Function<String, String> invalidCharacterCheck = str -> { if (!str.matches("^[a-f,A-F]$")) { throw new RuntimeException("Contains invalid character."); } return str; }; /** * 这里的公共方法组合了该类中的基本校验逻辑构成一个复合的逻辑 */ public static void checkStringLengthAndPhoneNumber(String string) { invalidCharacterCheck.compose(lengthCheck).apply(string); } }
以上がJava8でのFunctionインターフェースの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。