美文网首页
Stream reduce

Stream reduce

作者: 黑曼巴yk | 来源:发表于2020-12-16 17:51 被阅读0次

    前言

    reduce是对Stream元素进行聚合求值,最常见的就是讲Stream的一连串的合成为单个值。
    reduce方法有三个重载方法

    Optional<T> reduce(BinaryOperator<T> accumulator);
    T reduce(T identity, BinaryOperator<T> accumulator);
    <U> U reduce(U identity,
                     BiFunction<U, ? super T, U> accumulator,
                     BinaryOperator<U> combiner);
    

    第一个接受BinaryOperator的lambada表达式

    List<Integer> numList = Arrays.asList(1,2,3,4,5);
    Optional<Integer> result = numList.stream().reduce((a,b) -> a + b );
    

    返回的是Optional类型的数据。

    第二个签名实现和第一个唯一的区别是它首次执行的时候,表达式第一个参数并不是Stream的第一个元素,而是通过签名的第一个参数identity.

    List<Integer> numList = Arrays.asList(1,2,3,4,5);
    Integer result = numList.stream().reduce(100, (a,b) -> a + b );
    

    第三个参数比较复杂,由于前面两种实现有个缺陷,计算结果必须和stream的元素类型相同,如上面代码:stream 中类型为int,那么计算结果必须为int。导致灵活性不足。

    List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5);
            String result = numList.stream().reduce("__", (a, b) -> a += String.valueOf(b), (x, t) -> null);
    

    其实第三个参数用在并行流中才会执行,所以在非并行流中返回null值对整个结果不产生影响。

    相关文章

      网友评论

          本文标题:Stream reduce

          本文链接:https://www.haomeiwen.com/subject/tclogktx.html