Heim >Java >javaLernprogramm >So verwenden Sie die Funktionsschnittstelle in Java8

So verwenden Sie die Funktionsschnittstelle in Java8

王林
王林nach vorne
2023-04-17 21:04:011591Durchsuche

Einführung in die Funktionsschnittstelle in Java 8

Java 8 bietet eine funktionale Schnittstelle Funktion. Diese Schnittstelle stellt die Ausführung einiger Operationen an einem Parameter und die anschließende Rückgabe der Operation dar. Wert. Diese Schnittstelle verfügt über eine abstrakte Methode apply, die die Operation an den Parametern angibt. 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;
}

Function 接口的用法

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方法对参数进行操作,将得到的结果再作为参数传递给 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));

Verwendung der Funktionsschnittstelle

apply Die Methode wird wie folgt verwendet:#🎜🎜#
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);
    }
}
#🎜 🎜 Der Parameter der #compose-Methode ist auch ein Function-Objekt. Wenn Sie die compose-Methode für die Function von A aufrufen, übergeben Sie das Function-Objekt von B und erhalten dann eine neue Function /code> Objekt C. Die Implementierungslogik des Function-Objekts von C besteht darin, zuerst die apply-Methode von B zu verwenden, um die Parameter zu bedienen, und dann das Ergebnis als zu verwenden >Parameter werden an die apply-Methode dieses Function-Objekts in A übergeben und dann wird das Ergebnis nach der Ausführung zurückgegeben. #🎜🎜##🎜🎜#Die Methode addThen hat ein ähnliches Prinzip, außer dass die Reihenfolge der internen Ausführungsmethoden unterschiedlich ist. #🎜🎜#rrreee#🎜🎜#Instanz der Funktionsschnittstelle#🎜🎜#rrreee

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Funktionsschnittstelle in Java8. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen