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

news2024/9/21 22:41:52

目录

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()

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

语法如下:

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

示例代码如下:

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()

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

语法如下:

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

实例如下:

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来自定义排序规则。(定制排序,可以看一下我上一篇博客)

语法如下:

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

示例如下:

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()方法比较元素是否相同。

语法如下:

Stream<T> distinct()

示例如下:

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个元素

如法如下:

Stream<T> limit(long maxSize)

示例如下:

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个元素,然后返回剩下的元素

语法如下:

Stream<T> skip(long n)

示例如下:

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()

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

语法如下:

void forEach(Consumer<? super T> action)

示例如下:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2153490.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis数据结构之String字符串

二.String字符串 redis中的所有key都是字符串类型&#xff0c;只不过是value类型有差异。 redis中的字符串&#xff0c;直接就是按照二进制的方式存储的&#xff08;不会做任何的编码转换&#xff08;就好像mysql&#xff0c;它默认的字符集是拉丁文&#xff0c;插入中文就会…

Linux 基础IO 2

读取与写入 read与fread 在基础IO 1中我们学会了open和fopen的函数这两个函数是用于为进程打开文件也可以理解为为进程和文件建立了一个链接使其可以交互。那我们建立号链接之后肯定还是需要对文件进行操作&#xff0c;现在我们先来了解读取操作。 read&#xff1a; 这是一…

Leetcode面试经典150题-94.二叉树的中序遍历

给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root [1] 输出&am…

SOMEIP_ETS_120: SD_Initial_Events_after_Subscribe_with_alternate_IPs

测试目的&#xff1a; 验证DUT在接收到Tester的SubscribeEventgroup消息后&#xff0c;能够向Tester指定的IP地址和端口发送SubscribeEventgroupAck确认消息以及对应的初始化字段。 描述 本测试用例旨在确保DUT能够正确处理SubscribeEventgroup消息&#xff0c;并按照消息中…

基于SpringBoot+Vue的健身房管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

自动化直播的未来:2024年必试的10款自动直播App曝光,教你轻松玩转直播!

自动化直播的未来&#xff1a;2024年必试的10款自动直播App曝光&#xff0c;教你轻松玩转直播&#xff01; 随着人工智能技术的飞速发展&#xff0c;自动化直播已经成为当下最热门的趋势之一。2024年&#xff0c;众多创新的AI自动直播App如雨后春笋般涌现&#xff0c;它们不仅…

IO流中的异常捕获

Java简化 接口AutoCloseable

unity3d入门教程九

unity3d入门教程九 20.2播放音频20.3在代码中播放21.1延时调用21.2invoke API21.3消息调用22.1交互界面22.2添加canvas22.3canavas的位置22.4添加text 这里给一个资源网站&#xff0c;可以部分免费下载&#xff0c;音乐和音效超多&#xff0c;支持检索 爱给网 https://www.aige…

【Delphi】创建应用程序和 LiveBindings示例(FMX)

一、创建一个FMX程序 界面上放置上如下3个控件&#xff1a;TProgressBar1, TArcDial1,TTrackBar1。 二、打开LiveBindings Designer 设计器 三、在 LiveBindings Designer 中&#xff0c;您的绑定图只包含对象&#xff0c;您可以将它们连接起来。 四、在设计器中&#xff0c;在…

idea 恢复 pom 文件呈现灰色并带删除线

今天在 idea 中导入别人的项目时发现有几个 pom 文件是灰色的并带删除线。 可以用以下方式解决&#xff1a; 打开file - settings - build,execution,deployment - Build Tools - Maven - Ignored Files 把 pom.xml 前面的复选框去掉&#xff0c;去掉之后&#xff0c;点击 appl…

Kerberos自我总结Kerberos自我总结

1、协议原理与漏洞产生 1.1 kerberos Kerberos协议是一种基于票据Ticket的认证方式&#xff0c;它由三个角色组成&#xff0c;分别是客户端Client、服务端Server和秘钥分发中心KDC。 协议中的交互分为六步&#xff0c;为AS_REQ、AS_REP、TGS_REQ、TGS_REP、AP_REQ和AP_REP …

【Linux】进程地址空间和进程调度队列

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/qinjh_/category_12625432.html 目录 问题现象 进程地址空间 进一步理解 地址空间 Linux2.6内核进程调度队列 …

C++——string的了解和使用

目录 引言 为什么要学习string 1.C语言中的字符串 2.C中的字符串 auto和范围for 1.auto 1.1 auto的介绍 1.2 注意事项 2.范围for 标准库中的string类 1.string类的迭代器 1.1 begin()与end()函数 1.2 rbegin()与rend()函数 2.string类的初始化和销毁 3.string类…

【线程】线程的控制

本文重点&#xff1a;理解线程控制的接口 前言 内核中是没有很明确线程的概念的&#xff0c;只有轻量级进程的概念&#xff0c;不会提供直接给我们线程的系统调用&#xff0c;而会给我们提供轻量级进程的系统调用。我们用户是需要线程的接口的&#xff0c;在应用层&#xff0…

java重点学习-总结

十五 总结 https://kdocs.cn/l/crbMWc8xEZda &#xff08;总结全部的精华&#xff09; 1.面试准备 企业筛选简历规则简历编写注意事项(亮点)项目怎么找&#xff0c;学习到什么程度面试过程(表达结构、什么样的心态去找工作) 2.redis 缓存相关(缓存击穿、穿透、雪崩、缓存过期淘…

智能自行车码表:基于2605C语音芯片的创新开发方案

一、开发背景 随着科技的飞速发展和人们对健康生活的追求&#xff0c;自行车骑行已成为一种广受欢迎的绿色出行方式。智能自行车码表作为骑行者的得力助手&#xff0c;不仅记录骑行数据&#xff0c;还逐渐融入了更多智能化功能。然而&#xff0c;传统码表在语音提示、多语种支持…

Science Robotic 内在触觉实现直观的物理人机交互

触觉传感器和电子皮肤是为机器人提供物理交互感的常见设备&#xff0c;但当用于机器人的大面积覆盖时&#xff0c;它们会变得复杂且昂贵。德国宇航中心近期发表的Science Robotics研究工作&#xff0c;使用内部高分辨率关节力扭矩传感器&#xff0c;在机械臂中实现了固有的全身…

linux网络-----传输层

前言 一.传输层&#xff1a; 数据要交接应用层先通过传输层&#xff08;给哪个程序发数据&#xff09; 传输层作用&#xff1a;负责数据能够从发送端传输接收端。对于应用层来说有许多服务&#xff0c;传输层怎么知道把数据发给那个应用服务&#xff1f; 这时就有了端口号&am…

BMC 虚拟i2c访问PCA9545(switch芯片)后面的设备,为什么找不到PCA9545?

1.说明 1.1 背景 无意中看到PCA9545(switch芯片)后面有设备&#xff0c;但是PCA9545设备本身是连接到物理设备i2c上的&#xff0c;然而扫描该物理i2c bus&#xff0c;却找不到该设备。此篇文章主要找一下该原因的。 1.2 参考代码 当前使用的是ast2600芯片&#xff0c;可参考…

Mudslide

作者未提供代码