针对于使用一个由Java 8的Stream API和Lambda表达式创建的一个高阶函数

原创
2023/12/11 16:30
阅读数 42
    static <T> Function<T, T> identity() {
        return t -> t;
    }

代码定义了一个名为identity的静态函数,它接受一个泛型参数T,并返回一个泛型函数Function<T, T>。这个函数的输入参数是一个泛型类型T,输出参数也是T。 函数内部定义了一个Lambda表达式t -> t,它接受一个泛型类型T作为参数,并返回相同的参数。这意味着,当调用这个函数时,它会将输入作为输出返回。 这个函数可以用于将一个值映射到另一个值,而不改变值本身。例如,如果你有一个整数列表,你可以使用identity()函数将其转换为一个新的整数列表,其中每个元素都是原始元素:

List<Integer> intList = Arrays.asList(1, 2, 3, 4, 5); 
List<Integer> identityList = intList.stream().map(identity()).collect(Collectors.toList()); 
System.out.println(identityList); // 输出:[1, 2, 3, 4, 5]

总之,这段代码定义了一个高阶函数identity,它返回一个函数,该函数接受一个泛型类型T作为参数,并返回相同的参数。 这意味着,这个函数可以用于将一个值映射到另一个值,而不改变值本身。

/**
     * 在给定的列表中查找满足指定条件的第一个元素
     *
     * @param list      要从中查找满足条件的元素的列表
     * @param predicate 用于检查元素是否满足条件的函数
     * @param <T>
     * @return
     */
    public static <T> T findFirst(List<T> list, Predicate<T> predicate) {
        return findFirst(list, predicate, Function.identity());
    }
    /**
     * 找到【列表 list】中满足【谓词条件 predicate】的第一个元素,将其转换为【泛型函数 func】的输出类型
     *
     * @param list      列表
     * @param predicate 谓词
     * @param func      函数
     */
    public static <T, U> U findFirst(List<T> list, Predicate<T> predicate, Function<T, U> func) {
        if (CollUtil.isEmpty(list)) {
            return null;
        }
        // 对【list】进行一系列流操作:
        // 1. filter() 过滤列表中的元素,使其满足谓词条件【predicate】
        // 2. findFirst() 找到满足条件的第一个元素
        // 3. map() 将该元素转换为泛型函数【func】的输出类型
        // 4. orElse() 返回找到的【元素】或【null】(如果列表为空)
        return list.stream().filter(predicate).findFirst().map(func).orElse(null);
    }
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部