Java中stream流及Collectors的常见用法详细汇总!!!

server/2024/9/23 3:49:40/

目录

1. Stream流的优势

2. 常用用法

2.1 中间操作

2.1.1filter()

2.1.2 map()

2.1.3 sorted()

2.1.4 distinct() 

2.1.5 limit()

2.1.6  skip()

2.2 终端操作

2.2.1 foreach()

2.2.2 collect()

2.2.3 reduce()

2.2.4 count()

2.2.5 anyMatch()

2.3 查找和匹配

2.3.1 findFirst()

2.3.2 findAny()

2.3.3 allMatch()

2.3.4 noneMatch()

2.4 映射与连接

2.4.1 flatMap()

2.4.2 mapToInt(), maToLong(), mapToDouble()

2.5 其他方法

2.5.1 forEachOrdered()

2.5.2 min()和max()

3. Collectors

3.1 Collectors常见用法

3.1.1 将流元素收集为列表(List)

3.1.2 将流元素收集为集合(Set)

3.1.3 将流元素收集为指定集合类型

3.1.4 将流元素收集为映射(Map)

3.1.5 将流元素进行分组

3.1.6 将流元素进行分区

3.1.7 将流元素进行汇总统计

3.1.8 将流元素连接成字符串

3.1.9 将流元素收集为不可变集合

1. Stream流的优势

  1. 简洁性和可读性:通过链式调用,Stream API使代码更加简洁易懂,减少了传统循环和条件判断的使用。
  2. 并行处理:通过parallelStream(),可以轻松实现并行化数据处理,从而充分利用多核处理器的性能。
  3. 惰性求值:Stream中的中间操作只有在终端操作触发时才会执行,避免了不必要的计算。

2. 常用用法

2.1 中间操作

        中间操作会返回一个新的Stream,并且是惰性求值的(即不会立即执行,直到遇到终端操作)。这些操作通常被用于过滤、映射和排序等任务。

2.1.1filter()

        用于根据指定的条件筛选流中的元素。然会一个只包含满足条件的元素的流

语法如下:

java">Stream<T> filter(Predicate<? super T> predicate)

示例代码如下:

java">List<String> names = Arrays.asList("Java", "Stream", "API", "Code");
List<String> filteredNames = names.stream().filter(name -> name.startsWith("J")).collect(Collectors.toList()); // 输出: [Java]

2.1.2 map()

        将流中的每一个元素以后应用一个函数,并将结果收集到一个新的流中。常用对象属性的提取或数据转换。

语法如下:

java"><R> Stream<R> map(Function<? super T, ? extends R> mapper)

实例如下:

java">List<String> words = Arrays.asList("Java", "Stream", "API");
List<Integer> wordLengths = words.stream().map(String::length).collect(Collectors.toList()); // 输出: [4, 6, 3]

2.1.3 sorted()

        对流中的元素进行排序。可以不带参数(自然排序),也可以传入comparator来自定义排序规则。(定制排序,可以看一下我上一篇博客)

语法如下:

java">Stream<T> sorted()
Stream<T> sorted(Comparator<? super T> comparator)

示例如下:

java">List<Integer> numbers = Arrays.asList(5, 3, 9, 1);
List<Integer> sortedNumbers = numbers.stream().sorted().collect(Collectors.toList()); // 输出: [1, 3, 5, 9]

2.1.4 distinct() 

        去除流中的重复元素。通过equals()方法比较元素是否相同。

语法如下:

java">Stream<T> distinct()

示例如下:

java">List<Integer> numbers = Arrays.asList(1, 2, 2, 3, 3, 3);
List<Integer> distinctNumbers = numbers.stream().distinct().collect(Collectors.toList()); // 输出: [1, 2, 3]

2.1.5 limit()

        限制流中元素的数量,返回前n个元素

如法如下:

java">Stream<T> limit(long maxSize)

示例如下:

java">List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> limitedNumbers = numbers.stream().limit(3).collect(Collectors.toList()); // 输出: [1, 2, 3]

2.1.6  skip()

        跳过流中的前n个元素,然后返回剩下的元素

语法如下:

java">Stream<T> skip(long n)

示例如下:

java">List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> skippedNumbers = numbers.stream().skip(2).collect(Collectors.toList()); // 输出: [3, 4, 5]

2.2 终端操作

        终端操作会触发Stream流的实际处理,并产生一个结果。常见的终端操作有收集数据、计算汇总值和执行遍历等。

2.2.1 foreach()

        对流中的每个元素执行指定的动作,一般用于便利流元素。

语法如下:

java">void forEach(Consumer<? super T> action)

示例如下:

java">List<String> names = Arrays.asList("Java", "Stream", "API");
names.stream().forEach(Syste

http://www.ppmy.cn/server/120608.html

相关文章

动态IP是如何实现的?

相信很多人都知道动态IP和静态IP的区别&#xff0c;但对于动态IP的实现过程或许还有些疑惑。那么接下来就为大家介绍一下动态IP的实现过程&#xff01; 动态IP的实现离不开一个关键协议&#xff0c;那就是DHCP。DHCP协议的主要任务就是在网络中自动分配IP地址&#xff0c;让设…

使用cmd命令窗口操作mongodb

一、效果显示 二、下载MongoDB 1. 在官网下载安装MongoDB 官网网址&#xff1a;Download MongoDB Community Server | MongoDB 我安装的版本是7.0.14(注意安装到空闲磁盘) 三、启动MongoDB服务 1. 配置环境变量 注意替换为你的路径。 2. 在MongoDB的data下创建db文件夹 在…

运维工程师面试整理-操作系统

在运维工程师的面试中,操作系统相关的知识通常是重中之重,尤其是Linux/Unix系统。以下是针对操作系统部分的一些详细内容,帮助你更好地准备面试。 1. Linux/Unix 基础 ● 常用命令 ○ 文件和目录管理:ls, cd, cp, mv, rm, mkdir, rmdir, find, grep, awk, sed

CentOS入门宝典:从零到一构建你的Linux服务器帝国

目录 引言 一、CentOS简介与版本选择 1.1 CentOS是什么&#xff1f; 1.2 版本选择 二、安装CentOS 2.1 准备安装介质 2.2 安装过程 三、基础配置与优化 3.1 更新系统 3.2 配置防火墙 3.3 配置SELinux 3.4 系统监控与日志 四、网络配置与管理 4.1 配置静态IP 4.…

华南理工大学信息工程高频电子线路课程设计——基于锁相环的调试解调器设计

完整报告链接如下&#xff1a; 通过网盘分享的文件&#xff1a;高频课设报告.docx 链接: https://pan.baidu.com/s/1J83UCDSU0UHcv4ONYxfyhg?pwdzqyr 提取码: zqyr --来自百度网盘超级会员v5的分享 懒得贴上来了&#xff0c;放一下截图。

SQL进阶技巧:火车票相邻座位预定一起可能情况查询算法 ?

目录 0 场景描述 1 数据准备 2 问题分析 2.1 分析函数法 2.2 自关联求解 3 小结

适用于QF的存档系统

存档系统 今天分享一个适用于QF的存档系统 这个系统的优点为 1、轻量化&#xff0c;总共代码不超过400行 2、自动化&#xff0c;基于QF框架&#xff0c;自动注入值 缺点&#xff1a; 1、不能序列化Unity内部类型&#xff0c;如Vector 2、需要给能被序列化的类加上【Seri…

k8s环境搭建(续)

查看节点信息并做快照 kubectl get nodes 将components.yml文件上传到master主机 创建nginx&#xff0c;会在添加一个新的pod kubectl run nginx --imagesnginx:latest 查看nginx的pod信息 [rootk8s-master ~]# kubectl get po -Aowide|grep nginx 出现错误&#xff0c;查…