JDK8之stream流的使用:归约类方法

116 阅读1分钟

「这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战

前言

所谓归约,在JDK8中,有着独特的解释,那就是将查询、筛选出的值,无论多个还是一个,将这些值归为一个值,有种压缩的意思。

下面我们就来看一下具体的示例吧。

JDK8之stream流的使用:归约类方法

归约类方法,其实在我们日常开发中,也会经常遇到使用他们的场景,比如集合求和,集合取最大值,集合取最小值,等等。

这些方法,其实从归约类方法中都可以实现。

求和

先说一个for循环如何来求和的吧。

public static void main(String[] args) {
    List<Integer> list = new ArrayList<>();
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    list.add(5);
    int num = 0;
    for (Integer i : list){
        num += i;
    }
    System.out.println(num);
}

由此我们就可以得到一个总和了。

那么在stream中,是如何实现的呢,其实stream的求和方法是reduce方法,我们可以通过reduce方法,将List集合中的值归到一个值上。

来看一下代码示例:

public static void main(String[] args) {
    List<Integer> list = new ArrayList<>();
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    list.add(5);
    int num = 0;
    list.stream().reduce(Integer::sum).get();
    System.out.println(num);
}

上述代码就可以将最后的和得出来了。

从此处开始延伸,reduce中传入的参数,是一个类型,后面跟着一个方法名sum。

这个sum是代表着求和,那是不是还有其他的方法。

当然了,常用的有以下这么几种,有些方法大家可以自行去试一下。

1.max

获取最大值

2.min

获取最小值

3.compare

值比较

分别是以下代码的使用方式。

System.out.println(list.stream().reduce(Integer::max).get());
System.out.println(list.stream().reduce(Integer::min).get());
System.out.println(list.stream().reduce(Integer::compare).get());
System.out.println(list.stream().reduce(Integer::compareTo).get());

总结

今天我们学习了JDK8中stream流的归约类方法,从此使用集合时,不用再去使用for循环进行求和,获取最大、最小值了,开发将会更加便捷。