java8 Stream API之reduce

通过前面那篇文章,我们已经对Stream API有了初步的认识,并对它在集合处理中的增强作用表示了肯定。同时我们上篇中示例了forEach、fiter、sum这些常用的功能,本篇我们只讲reduce。

reduce的作用是把stream中的元素给组合起来。至于怎么组合起来:它需要我们首先提供一个起始种子,然后依照某种运算规则使其与stream的第一个元素发生关系产生一个新的种子,这个新的种子再紧接着与stream的第二个元素发生关系产生又一个新的种子,就这样依次递归执行,最后产生的结果就是reduce的最终产出,这就是reduce的算法最通俗的描述;那么结合实际的业务场景来说,运用reduce我们可以做sum,min,max,average,所以这些我们称之为针对具体应用场景的reduce,这些常用的reduce,stream api已经为我们封装了对应的方法。

以下给出一些具体应用场景的reduce实现方式:

sum:

    @Test
    public void testSum() {
        List integers = Arrays.asList(1, 2, 3, 4, 5);

        // 没有起始值时返回为Optional类型
        Optional sumOptional = integers.stream().reduce(Integer::sum);
        System.out.println(sumOptional.get());

        // 可以给一个起始种子值
        Integer sumReduce = integers.stream().reduce(0, Integer::sum);
        System.out.println(sumReduce);

        //直接用sum方法
        Integer sum = integers.stream().mapToInt(i -> i).sum();
        System.out.println(sum);
    }

concat

@Test
    public void testConcat() {
        //构造字符串流
        List strs = Arrays.asList("H", "E", "L", "L", "O");

        // reduce
        String concatReduce = strs.stream().reduce("", String::concat);
        System.out.println(concatReduce);
    }

min

    @Test
    public void testMin() {

        //min reduce
        Stream integerStream = Stream.of(1, 2, 3, 4, 5);
        Integer minReduce = integerStream.reduce(Integer.MAX_VALUE, Integer::min);
        System.out.println(minReduce);


        // min
        Stream integerStream1 = Stream.of(1, 2, 3, 4, 5);
        OptionalInt min = integerStream1.mapToInt(i -> i).min();
        System.out.println(min.getAsInt());
    }

max

    @Test
    public void testMax() {

        //max reduce
        Stream integerStream = Stream.of(1, 2, 3, 4, 5);
        Integer maxReduce = integerStream.reduce(Integer.MIN_VALUE, Integer::max);
        System.out.println(maxReduce);


        // max
        Stream integerStream1 = Stream.of(1, 2, 3, 4, 5);
        OptionalInt max = integerStream1.mapToInt(i -> i).max();
        System.out.println(max.getAsInt());
    }

ok,相信大家已经对reduce有所了解!

你可能感兴趣的:(java)