首页 > 编程语言 >Java 8 新特性:Stream 流快速入门

Java 8 新特性:Stream 流快速入门

时间:2024-07-18 13:51:06浏览次数:7  
标签:Stream Java Collectors stream 元素 collect 分组 入门

前言

在 java 中,涉及到对数组、集合等集合类元素的操作时,通常我们使用的是循环的方式进行逐个遍历处理,或者使用 stream 流的方式进行处理。

什么是 Stream?

Stream(流)是一个来自数据源的元素队列并支持聚合操作,流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。 Stream(流)的组成包含:元素、数据源、聚合操作、内部迭代、Pipelining等。

 创建 Stream 流

1)stream()        
Stream<String> stream = stringList.stream();

2)parallelStream()

Stream<String> stringStream = stringList.parallelStream();

Stream 流常用操作

1)forEach

stringList.forEach(System.out::println);

2)map

stringList.stream().map(i->i.equals("juejin"));

3)filter

stringList.stream().filter(i->i.equals("juejin"));

4)limit

integerList.stream().limit(3);

5)skip

integerList.stream().skip(5).limit(3);

6)distinct

integerList.stream().distinct().collect(Collectors.toList());

7)sorted

integerList.stream().sorted();

8)sorted(Comparator com)

integerList.stream().sorted(Comparator.comparing(Integer::intValue));

9)Collectors 收集器

  • 恒等处理 Collectors

所谓恒等处理,指的就是Stream的元素在经过Collector函数处理前后完全不变,例如toList()操作,只是最终将结果从Stream中取出放入到List对象中,并没有对元素本身做任何的更改处理

list.stream().collect(Collectors.toList());
list.stream().collect(Collectors.toSet());
list.stream().collect(Collectors.toCollection());
  • 归约汇总 Collectors

对于归约汇总类的操作,Stream流中的元素逐个遍历,进入到Collector处理函数中,然后会与上一个元素的处理结果进行合并处理,并得到一个新的结果,以此类推,直到遍历完成后,输出最终的结果

counting
 
统计流中的元素个数
 
summingInt
 
计算流中指定int字段的累加总和。针对不同类型的数字类型,有不同的方法,比如summingDouble等
 
averagingInt
 
计算流中指定int字段的平均值。针对不同类型的数字类型,有不同的方法,比如averagingLong等
 
joining
 
将流中所有元素(或者元素的指定字段)字符串值进行拼接,可以指定拼接连接符,或者首尾拼接字符
 
maxBy
 
根据给定的比较器,选择出值最大的元素
 
minBy
 
根据给定的比较器,选择出值最小的元素

  • 分组分区 Collectors
    仅仅是做一个常规的数据分组操作时,可以仅传入一个分组函数即可
public void groupBySubCompany() {
    // 按照子公司维度将员工分组
    Map<String, List<Employee>> resultMap =
    getAllEmployees().stream()
    .collect(Collectors.groupingBy(Employee::getSubCompany));
    System.out.println(resultMap);
}

    如果不仅需要分组,还需要对分组后的数据进行处理的时候,则需要同时给定分组函数以及值收集器

public void groupAndCaculate() {
    // 按照子公司分组,并统计每个子公司的员工数
    Map<String, Long> resultMap = getAllEmployees().stream()
    .collect(Collectors.groupingBy(Employee::getSubCompany,
                                   Collectors.counting()));
    System.out.println(resultMap);
}

总结

简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。让程序员写出高效率、干净、简洁的代码。

标签:Stream,Java,Collectors,stream,元素,collect,分组,入门
From: https://www.cnblogs.com/qimoxuan/p/18309368

相关文章

  • Java面试题系列 - 第16天
    题目:Java中的日期和时间API背景说明:Java中的日期和时间API经历了几次重大变革,从最初的基本Date和Calendar类,到Java8中引入的现代日期时间API(java.time包),提供了更强大、更直观的时间处理能力。掌握现代日期时间API的使用,对于编写准确和可维护的日期时间相关代码至关重要。问......
  • java基础知识(3)—关键字
    在Java编程的广阔领域中,关键字宛如一把把精确的工具,赋予开发者准确表达意图和实现复杂逻辑的能力。访问控制关键字:private:确保变量、方法或内部类仅在所属的类内部可访问,为数据提供了最高级别的隐私保护。protected:在继承关系中,允许子类和同一包中的类访问特定的成员。pu......
  • 运维系列(亲测有效):ubuntu怎么下载java
    ubuntu怎么下载javaubuntu怎么下载java如何在Ubuntu上下载Java步骤1:更新Ubuntu软件包列表步骤2:安装默认的Java运行时环境(JRE)步骤3:安装Java开发工具包(JDK)示例状态图示例旅行图ubuntu怎么下载java如何在Ubuntu上下载JavaJava是一种广泛使用的编程语言,许多应用程......
  • java23种设计模式!附源码
            本文将详细介绍Java中常见的23种设计模式、应用场景、优缺点、代码示例。包括单例模式、工厂模式、建造者模式、原型模式、适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、代理模式、职责链模式、状态模式、策略模式、模板方法模式、观察者......
  • 杜教筛入门
    当学Min25的一个前置知识。算法内容。定义\(S(n)=\sum_{i=1}^nf(i)\)。对于一个函数\(g\),有:\[\begin{aligned}\sum_{i=1}^n(f\timesg)(i)&=\sum_{i=1}^n\sum_{d|i}f(\frac{i}{d})g(d)\\&=\sum_{d=1}^ng(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}f(i)\\&am......
  • ctfshow web入门 xss web327--web333 存储型和七七八八的
    存储型漏洞web327这道题貌似和反射型的xss差不多,直接打就行web328body和svg的好像不行<script>window.open('http://ceye地址/'+document.cookie)</script><script>window.open('http://hrcgnc.ceye.io/'+document.cookie)</script>先注册,密码多于6位很明显在这......
  • java创建线程池的几中方式
    1.创建线程池四种方式使用Executors类,Executors类是Java中用于创建线程池的工厂类,它提供了多种静态方法来创建不同类型的线程池使用ThreadPoolExecutor类,ThreadPoolExecutor是Java中线程池的一个核心类,它提供了更细粒度的控制来创建和管理线程池使用Future和......
  • Linux入门---(二)shell命令
    1.1man获得帮助信息help只能查询内嵌命令,外部命令查询格式:命令--help1.2快捷键ctrl+u,清空当前已输入,但未执行的命令1.3文件目录类从根目录/开始的就是绝对路径,从当前文件夹开始的就是相对路径pwd显示当前工作目录的绝对路径ls列出目录的内容(ls-a列出全部文件)cd切......
  • Java中如何将一个 List 类型的参数传入存储过程(Oracle数据库)
    Java中如何将一个List类型的参数传入存储过程(Oracle数据库)步骤简述存储过程TYPE模型映射对象JAVA代码链接转换可能出现的错误步骤简述定义好存储过程,Java中的数组对象建立数据库映射对象来映射List类型的数据Java中调用存储过程传入List类型的参数存储过......
  • 基于Java+Vue的采购管理系统:实现采购数字化升级(整套源码)
     前言:采购管理系统是一个综合性的管理平台,旨在提高采购过程的效率、透明度,并优化供应商管理。以下是对各个模块的详细解释:一、供应商准入供应商注册:供应商通过在线平台进行注册,填写基本信息和资质文件。资质审核:系统对供应商提交的资质文件进行自动或人工审核,确保供应商......