• Java函数式接口


    函数式接口定义且只定义了一个抽象方法.函数式接口的抽象方法的签名称为函数描述符
    Java 8的java.util.function包中引入了几个新的函数式接口。

    1.Predicate

    java.util.function.Predicate<T>接口定义了一个名叫 test 的抽象方法,它接受泛型 T对象,并返回一个 boolean 。

    在需要表示一个涉及类型T的布尔表达式时,就可以使用这个接口。

    比如,可以定义一个接受 String对象的 Lambda表达式,如下所示。

    @FunctionalInterface
    public interface Predicate<T>{
        boolean test(T t);
    }
    public static <T> List<T> filter(List<T> list, Predicate<T> p) {
        List<T> results = new ArrayList<>();
        for(T s: list){
            if(p.test(s)){
                results.add(s);
            }
        }
        return results;
    }
    Predicate<String> nonEmptyStringPredicate = (String s) -> !s.isEmpty();
    List<String> nonEmpty = filter(listOfStrings, nonEmptyStringPredicate);

    2.Consumer

     java.util.function.Consumer<T> 定义了一个名叫 accept的抽象方法,它接受泛型 T的对象,没有返回(void).

    如果需要访问类型 T的对象,并对其执行某些操作,就可以使用这个接口。比如,可以用它来创建一个 forEach 方法,接受一个 Integers的列表,并对其中每个元素执行操作。

    在下面的代码中,就可以使用这个forEach方法,并配合 Lambda来打印列表中的所有元素。

    @FunctionalInterface
    public interface Consumer<T>{
        void accept(T t);
    }
    public static <T> void forEach(List<T> list, Consumer<T> c){
        for(T i: list){
            c.accept(i);
        }
    }
    forEach(Arrays.asList(1,2,3,4,5),(Integer i) -> System.out.println(i));

    3.Function

     java.util.function.Function<T, R>接口定义了一个叫作 apply的方法,它接受一个泛型 T的对象,并返回一个泛型 R的对象。

    如果需要定义一个 Lambda ,将输入对象的信息映射到输出,就可以使用这个接口(比如提取苹果的重量,或把字符串映射为它的长度)。

    在下面的代码中,展示如何利用它来创建一个map方法,以将一个String列表映射到包含每个String长度的Integer列表。

    @FunctionalInterface
    public interface Function<T, R>{
        R apply(T t);
    }
    public static <T, R> List<R> map(List<T> list,
    Function<T, R> f) {
        List<R> result = new ArrayList<>();
        for(T s: list){
            result.add(f.apply(s));
        }
        return result;
    }
    // [7, 2, 6]
    List<Integer> l = map(Arrays.asList("lambdas","in","action"),(String s) -> s.length());
  • 相关阅读:
    3d角色模型 制作 全过程 。3d max 。3d role model making process.3d Max
    Cocos2d-X开发教程-捕鱼达人 Cocos2-x development tutorial
    unity3d 给游戏添加音源 Unity3d adds a sound source to the game
    安卓 运行、调试 配置 android Run/debug configurations
    Gradle 同步 已经开始 Gradle sync started
    更新 是 可用的 针对 安卓 软件开发包和工具 Updates are available for android software development packages and tools
    [Educational Codeforces Round 16]A. King Moves
    他们在军训,我在搞 OI(一)
    [POJ1383]Labyrinth
    [POJ1157]LITTLE SHOP OF FLOWERS
  • 原文地址:https://www.cnblogs.com/Java-Script/p/11096120.html
Copyright © 2020-2023  润新知