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

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

前言


所谓归约,在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循环进行求和,获取最大、最小值了,开发将会更加便捷。


相关文章
|
2月前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
64 2
|
1月前
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
25 1
|
2月前
|
Java API 开发者
【Java字节码操控新篇章】JDK 22类文件API预览:解锁Java底层的无限可能!
【9月更文挑战第6天】JDK 22的类文件API为Java开发者们打开了一扇通往Java底层世界的大门。通过这个API,我们可以更加深入地理解Java程序的工作原理,实现更加灵活和强大的功能。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来!
|
2月前
|
Java API 开发者
【Java字节码的掌控者】JDK 22类文件API:解锁Java深层次的奥秘,赋能开发者无限可能!
【9月更文挑战第8天】JDK 22类文件API的引入,为Java开发者们打开了一扇通往Java字节码操控新世界的大门。通过这个API,我们可以更加深入地理解Java程序的底层行为,实现更加高效、可靠和创新的Java应用。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来,并积极探索类文件API带来的无限可能!
|
3月前
|
存储 Java
【Java集合类面试七】、 JDK7和JDK8中的HashMap有什么区别?
JDK7中的HashMap使用数组加链表解决冲突,而JDK8增加了红黑树结构以优化链表过长时的性能,提高查找效率。
|
3月前
|
API
JDK8的stream有求和方法吗?
【8月更文挑战第20天】JDK8的stream有求和方法吗?
131 3
|
3月前
|
Java
JDK序列化原理问题之Hessian框架不支持writeObject/readObject方法如何解决
JDK序列化原理问题之Hessian框架不支持writeObject/readObject方法如何解决
|
3月前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
3月前
|
Java 编译器 API
JDK版本特性问题之在 JDK 17 中,想声明一个密封类,如何解决
JDK版本特性问题之在 JDK 17 中,想声明一个密封类,如何解决
|
3月前
|
Java API
JDK版本特性问题之Hidden Classes(隐藏类)在 JDK 15 中有何用途,如何实现
JDK版本特性问题之Hidden Classes(隐藏类)在 JDK 15 中有何用途,如何实现