ホームページ  >  記事  >  Java  >  Java8でのFunctionインターフェースの使い方

Java8でのFunctionインターフェースの使い方

王林
王林転載
2023-04-17 21:04:011541ブラウズ

Java 8 の Function インターフェイスの概要

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 の Functioncompose メソッドを呼び出すときに、B の Function オブジェクトを渡して、新しい Function オブジェクトを取得します。 C. C の Function オブジェクトの実装ロジックは、まず B の apply メソッドを使用してパラメータを操作し、次に resultparameter# として使用します。 # 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 サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。