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


相关文章
|
1月前
|
安全 Java API
JDK 11中的动态类文件常量:探索Java字节码的灵活性与动态性
在JDK 11中,Java语言引入了一个新的特性,允许在运行时动态地修改类文件常量。这一特性为Java开发者提供了更大的灵活性,使他们能够根据需要在运行时更改类文件中的常量值。本文将深入探讨动态类文件常量的工作原理、优点、限制以及在实际项目中的应用。
75 11
|
1天前
|
前端开发 算法 安全
JavaEE企业级开发中常用的JDK7和JDK8的时间类
JavaEE企业级开发中常用的JDK7和JDK8的时间类
16 3
|
12天前
日期类(jdk8之前)
日期类(jdk8之前)
|
18天前
|
Java
JavaSE——JDK8新特性(2/2):方法引用(静态方法的引用、实例方法的引用、特定类型的方法引用、构造器引用)
JavaSE——JDK8新特性(2/2):方法引用(静态方法的引用、实例方法的引用、特定类型的方法引用、构造器引用)
10 0
|
1月前
|
Java API
【JAVA进阶篇教学】第三篇:JDK8中Stream API使用
【JAVA进阶篇教学】第三篇:JDK8中Stream API使用
|
1月前
|
安全 Java 开发者
jdk1.8 Optional类从入门到实战
Optional 类是 Java 8 引入的一个容器类,用于表示一个值存在或不存在。其在 java.util 包中,主要目的是为了解决 Java 程序中广泛存在的空指针异常(NullPointerException)问题,同时提供了一种更优雅的方式来处理可能为 null 的对象。 在 Java 8 之前,处理 null 值往往依赖于显式的 null 检查,这种方式不仅增加了代码的复杂度,而且容易出错。Optional 类提供了一种更好的解决方案,通过封装可能为 null 的值,强制开发者显式地处理值存在或不存在的情况,从而减少在运行时出现 NullPointerException 的可能性。
31 3
|
1月前
|
安全 Java 开发者
JDK 9:不可变集合类工厂方法的探索与实践
JDK 9引入了一系列新的不可变集合类工厂方法,这些方法为Java开发者提供了更加便捷和安全的方式来创建不可变集合。本文将深入探讨这些新方法的原理、优势以及如何在实际开发中应用它们。
|
1月前
|
Java API 数据处理
JDK 8:Stream API——数据处理的新篇章
JDK 8引入了Stream API,为Java中的数据处理提供了一种全新的方式。本文将详细介绍Stream API的原理、优势以及如何在实际开发中应用这一特性。
|
1月前
|
Java 开发者
JDK 9新特性探秘:接口中的私有方法
本文旨在探讨Java Development Kit 9(JDK 9)为Java接口引入的新特性——私有方法。在JDK 9之前,接口只能包含公共的抽象方法和常量。然而,随着Java的不断发展,接口中需要更加灵活的方式来处理复杂性和代码重用。因此,JDK 9引入了私有方法,允许开发者在接口内部定义私有方法和私有静态方法,从而提高了代码的模块性和可维护性。本文将详细介绍这一新特性的使用方法、应用场景及其对Java编程的影响。
|
1月前
|
存储 算法 Java
JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)(二)
JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)(二)