Maison  >  Article  >  Java  >  Comment utiliser l'interface de fonction en Java8

Comment utiliser l'interface de fonction en Java8

王林
王林avant
2023-04-17 21:04:011563parcourir

Introduction à l'interface Function dans Java 8

Java 8 fournit une interface fonctionnelle Fonction Cette interface permet d'effectuer certaines opérations sur un paramètre et de renvoyer la valeur après l'opération. Cette interface possède une méthode abstraite apply, qui indique l'opération sur les paramètres. 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));

Utilisation de l'interface de fonction

La méthode apply est utilisée comme suit : 🎜
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);
    }
}
🎜Le paramètre de la méthode compose est également une fonction Function Objet. Lors de l'appel de la méthode <code>compose sur la Fonction de A, transmettez l'objet Function de B, puis obtenez une nouvelle Fonction Objet C. La logique d'implémentation de l'objet <code>Function de C consiste à utiliser d'abord la méthode apply de B pour faire fonctionner les paramètres, puis à utiliser le résultat comme Les >Paramètres sont passés à la méthode apply de cet objet Function, puis le résultat après exécution est renvoyé. 🎜🎜La méthode addThen a un principe similaire, sauf que l'ordre des méthodes d'exécution internes est différent. 🎜rrreee🎜Instance de l'interface de fonction🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer