(三)流的终止操作

news/2024/2/28 2:01:38

终止操作

流方法含义
anyMatch检查是否至少匹配一个元素,返回boolean。
allMatch检查是否匹配所有元素,返回boolean。
noneMatch检查是否没有匹配所有元素,返回boolean。
findAny将返回当前流中的任意元素。
findFirst返回第一个元素
forEach遍历流
collect收集器,将流转换为其他形式。
reduce可以将流中元素反复结合起来,得到一个值。
max/min/count返回流中元素最大/最小/总数。
1. 收集(collect)

1.1归集(toList/toSet/toMap)

转化成新的List
List<> new = old.stream().collect(Collectors.toList());转化成Map
Map<T,E> new= old.stream().collect(Collectors.toMap(T,E));转换成set集合
Set<> new =old.stream().Collectors.toSet();转换成特定的set集合
TreeSet<> new =old.stream().Collectors.toCollection(TreeSet::new);

转化成新的List

原始data:
List<User> userList = new ArrayList<>();
userList.add(new User(1, "张三", 18));
userList.add(new User(2, "李四", 19));
userList.add(new User(3, "王五", 20));//user的id提取出来
List<User> users = userList;
List<Integer> idList = users.stream().map(User::getId).collect(Collectors.toList());
//{1, 2, 3}
System.out.println(idList);

转化成Map

/1.两个参数的用法
//将userList转化为key为id,value为User对象的map
Map<Integer, User> map1 = userList.stream().collect(Collectors.toMap(User::getId, p -> p));
Map<Integer, User> map2 = userList.stream().collect(Collectors.toMap(User::getId, p -> p));//结果
{1: User(1, "张三", 18)2: User(2, "李四", 19)3: User(3, "王五", 20)
}//2.三个参数的用法
Map<Integer, String> map3 = userList.stream().collect(Collectors.toMap(User::getAge, User::getName, (a, b) -> b));//结果
{19: "李四"20: "王五"
}//Collectors.groupingBy()
//当你想获取key是age的map,又不想覆盖掉重复项数据
Map<Integer, List<User>> map4 = userList.stream().collect(Collectors.groupingBy(User::getAge));
System.out.println(map4);//结果
{18: [User(1, "张三", 18)]19: [User(2, "李四", 19)]20: [User(2, "王五", 20)]
}

1.2 统计(count/averaging)

Collectors提供了一系列用于数据统计的静态方法:

  • 计数:count
  • 平均值:averagingInt、averagingLong、averagingDouble
  • 最值:maxBy、minBy
  • 求和:summingInt、summingLong、summingDouble
  • 统计以上所有:summarizingInt、summarizingLong、summarizingDouble
public static void main(String[] args) {List<Person> personList = new ArrayList<Person>();personList.add(new Person(1, "zhangsan", 18, 4000, "shanghai"));personList.add(new Person(2, "lisi", 19, 5000, "beijing"));personList.add(new Person(3, "wanger", 20, 6000, "guangdong"));personList.add(new Person(4, "mazi", 21, 7000, "jiangxi"));personList.add(new Person(5, "laoer", 22, 8000, "zhejiang"));// 求总数Long count = personList.stream().collect(Collectors.counting());// 求平均工资Double average = personList.stream().collect(Collectors.averagingDouble(Person::getSalary));// 求最高工资Optional<Integer> max = personList.stream().map(Person::getSalary).collect(Collectors.maxBy(Integer::compare));// 求工资之和Integer sum = personList.stream().collect(Collectors.summingInt(Person::getSalary));// 一次性统计所有信息DoubleSummaryStatistics collect = personList.stream().collect(Collectors.summarizingDouble(Person::getSalary));System.out.println("员工总数:" + count);System.out.println("员工平均工资:" + average);System.out.println("员工工资总和:" + sum);System.out.println("员工工资所有统计:" + collect);}//结果
员工总数:5
员工平均工资:6000.0
员工工资总和:30000
员工工资所有统计:DoubleSummaryStatistics{count=5, sum=30000.000000, min=4000.000000, average=6000.000000, max=8000.000000}

1.3 归约(reducing)
Collectors类提供的reducing方法,相比于stream本身的reduce方法,增加了对自定义归约的支持。

public static void main(String[] args) {List<Person> personList = new ArrayList<Person>();personList.add(new Person(1, "zhangsan", 18, 4000, "shanghai", "男"));personList.add(new Person(2, "lisi", 19, 5000, "beijing", "女"));personList.add(new Person(3, "wanger", 20, 6000, "guangdong", "男"));personList.add(new Person(4, "mazi", 21, 7000, "jiangxi", "男"));personList.add(new Person(5, "laoer", 22, 8000, "zhejiang", "女"));Integer allAge = personList.stream().map(Person::getAge).collect(Collectors.reducing(Integer::sum)).get();System.out.println(allAge);
}  //结果
100

1.4 接合(joining)
joining可以将 stream 中的元素用特定的连接符(没有的话,则直接连接)连接成一个字符串。

public static void main(String[] args) {List<Person> personList = new ArrayList<Person>();personList.add(new Person(1, "zhangsan", 18, 4000, "shanghai", "男"));personList.add(new Person(2, "lisi", 19, 5000, "beijing", "女"));personList.add(new Person(3, "wanger", 20, 6000, "guangdong", "男"));personList.add(new Person(4, "mazi", 21, 7000, "jiangxi", "男"));personList.add(new Person(5, "laoer", 22, 8000, "zhejiang", "女"));String names = personList.stream().map(t -> t.getName()).collect(Collectors.joining(","));System.out.println("所有员工的姓名:" + names);List<String> list = Arrays.asList("A", "B", "C");String string = list.stream().collect(Collectors.joining("&"));System.out.println("拼接后的字符串:" + string);}//结果
所有员工的姓名:zhangsan,lisi,wanger,mazi,laoer
拼接后的字符串:A&B&C

1.5 归约(reduce)
归约,也称缩减,顾名思义,是把一个流缩减成一个值,能实现对集合求和、求乘积和求最值操作。

/求和,求积
public static void main(String[] args) {List<Integer> list = Arrays.asList(1, 2, 3, 4, 7, 9);Optional<Integer> sum = list.stream().reduce((x, y) -> x + y);Optional<Integer> sum1 = list.stream().reduce(Integer::sum);Integer sum2 = list.stream().reduce(0, Integer::sum);Optional<Integer> product = list.stream().reduce((x, y) -> x * y);// 最大值方式1Optional<Integer> max = list.stream().reduce((x, y) -> x > y ? x : y);// 最大值方式2Integer max1 = list.stream().reduce(1, Integer::max);System.out.println("求和:" + sum.get() + "," + sum1.get() + "," + sum2);System.out.println("求积:" + product.get());System.out.println("求和:" + max.get() + "," + max1);
}//结果
求和:26,26,26
求积:1512
求和:9,9

1.6 聚合(max/min/count)
Collectors提供了一系列用于数据统计的静态方法:

计数:count平均值:averagingInt、averagingLong、averagingDouble最值:maxBy、minBy求和:summingInt、summingLong、summingDouble统计以上所有:summarizingInt、summarizingLong、summarizingDouble

//获取最长元素
public static void main(String[] args) {List<String> list = Arrays.asList("asdas", "asdasdasd", "sdasd", "fdfdf", "qqe");Optional<String> max = list.stream().max(Comparator.comparing(String::length));System.out.println("最长的字符串:" + max.get());
}//结果
最长的字符串:asdasdasd

1.7 匹配(find/match)

//匹配示例
public static void main(String[] args) {List<String> strings = Arrays.asList("123", "456", "abc", "sdf", "qwe", "qw2", "qwe");//anyMatch  判断集合中是否至少存在一个元素满足条件boolean a = strings.stream().anyMatch("123"::equals);System.out.println(a);//allMatch 判断集合中是否所有元素都满足条件boolean b = strings.stream().allMatch("123"::equals);System.out.println(b);//noneMatch 判断集合中是否所有元素都不满足条件boolean c = strings.stream().noneMatch("123"::equals);System.out.println(c);//findAny 返回当前流中任意元素Optional<String> any = strings.stream().findAny();any.ifPresent(System.out::println);//findFirst 返回当前流中第一个元素Optional<String> first = strings.stream().findFirst();first.ifPresent(System.out::println);
}//结果
true
false
false
123
123

http://www.ppmy.cn/news/54283.html

相关文章

MySQL表的插入详解

文章目录 前言一、插入完整数据记录二、插入部分数据记录三、插入多条数据记录总结 前言 插入数据记录是常见的数据操作&#xff0c;可以显示向表中增加的新的数据记录。在MySQL中可以通过“INSERT INTO”语句来实现插入数据记录&#xff0c;该SQL语句可以通过如下4种方式使用…

ext-1:PDK工具包编译出例程

1、TI的单独StarterWare不更新后&#xff0c;后续维护和更新的是 PROCESSOR-SDK-AM335X 软件开发套件 &#xff08;PDK&#xff09;&#xff0c;对比以前的&#xff0c;里面没有例程&#xff0c;所以下载安装完需要自己编译出example例程。 因为编译出example例程中间会出现很…

为什么用Selenium做自动化测试

手工测试的问题 手工操作点点点借助的是人脑的反应和聪明&#xff0c;为什么不用手点了呢&#xff1f;手会酸&#xff0c;脑子会累&#xff0c;会占据太多的时间。想一想为什么会学习自动化测试。我们都希望通过工具来解放我们的双手&#xff0c;大脑&#xff0c;眼睛。 为什…

四福来轮全向底盘实现写字功能

1. 功能说明 本文示例将实现R310b样机四福来轮全向底盘绘制“探索者”空心字的功能。 2. 电子硬件 本实验中采用了以下硬件&#xff1a; 主控板 Basra主控板&#xff08;兼容Arduino Uno&#xff09; 扩展板 Bigfish2.1扩展板 SH-ST步进电机扩展板电池11.1v动力电池 其它 步进…

【五一创作】( 字符串) 409. 最长回文串 ——【Leetcode每日一题】

❓ 409. 最长回文串 难度&#xff1a;简单 给定一个包含大写字母和小写字母的字符串 s &#xff0c;返回 通过这些字母构造成的 最长的回文串 。 在构造过程中&#xff0c;请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。 示例 1: 输入:s “abccccdd”…

Node服务端开发【NPM】

文章目录 前言NPM使用NPM使用场景NPM的常用命令NPM命令使用介绍使用NPM安装模块下载三方包全局安装VS本地安装本地安装全局安装全局模块路径查看与路径修改 卸载模块更新模块搜索模块NPM服务器发布包 NPM换源nrm全局安装 nrm:nrm ls 列出来现在已经配置好的所有的原地址nrm use…

2023年第二十届五一数学建模竞赛题目 C题详细思路

详细思路以及发布视频版&#xff0c;大家可以去观看&#xff0c;这里是对应的文字版&#xff0c;内容相差不多。 C题&#xff1a;“双碳”目标下低碳建筑研究 C题的问题设置其实是本次比赛最简单的一道&#xff0c;就是简单的综合评价预测模型。真正提升C题难度的其实是C题的…

git -团队开发 版本控制

文章目录 Git的概念Git的安装过程Git结构交互方式初始化本地仓库Git常用命令add和commit命令status命令log命令log命令2reset命令hard参数/mixed参数/soft参数 删除文件找回本地库删除的文件找回暂存区删除的文件 diff命令 分支操作分支冲突问题&#xff0c;如何解决冲突题 Git…

Ceph入门到精通-Ceph 编排器简介

第 1 章 Ceph 编排器简介 作为存储管理员&#xff0c;您可以将 Ceph 编排器与 Cephadm 实用程序搭配使用&#xff0c;能够发现设备并在 Red Hat Ceph Storage 集群中创建服务。 1.1. 使用 Ceph Orchestrator Red Hat Ceph Storage Orchestrators 是经理模块&#xff0c;主要…

C:记点零碎的东西

感谢下面的参考文章中博主的辛苦撰写 1.零值包括哪些 参考&#xff1a;https://www.cnblogs.com/PikapBai/p/14415303.html 0&#xff0c;0.0&#xff0c;FALSE,NULL "空指针",空白符&#xff0c;空字符串等 float x 与零值比较时不能直接使用或!,float 类型的零值…

56.网页设计规则#4_图标

使用好的图标 使用一个好的图标包&#xff0c;有大量的免费和付费图标包 图标工具推荐&#xff1a; ● Phosphor icons ● ionicons ● ICONS8 只使用一个图标包。不要混合不同图标包中的图标 使用SVG图标或图标字体。不要使用位图图像格式(.jpg and .png)! 调整网站个性!圆…

计算机专业jsp项目,可练手

OA办公自动化管理系统&#xff08;Struts1.2Hibernate3.0Spring2DWR&#xff09;.zip[新闻文章]梦想年华JSP新闻发布系统1.0_jspnews.rar网上商城系统(JSPMYSQL).zip[上传下载]ExtJS 2.2 开源网络硬盘系统_dogdisk.rar[其他类别]JdonFramework开源框架 v5.1 Build20071025_jdon…

第三方jar包引入项目,发布到本地和远程仓库

在开发过程中&#xff0c;往往会遇到对接其他公司的系统。然后对接公司会提供API对接方式&#xff0c;就是给一个jar包。我们只需要把jar包引入到项目中直接用即可。本地引用jar的话可以有两种方式。第一种就是本地包引用&#xff0c;如下将包放下工程下&#xff0c;然后maven指…

化学(光谱学方向)SCI期刊汇总

目录 1、ANALYTICAL METHODS 2、ANALYTICA CHIMICA ACTA 3、CHEMOMETRICS AND INTELLIGENT LABORATORY SYSTEMS 4、Computers and Electronics in Agriculture 5、Food Chemistry 6、Journal of Chemometrics 7、POSTHARVEST BIOLOGY AND TECHNOLOGY 8、SPECTROCHIMICA …

mac十大必备软件排行榜 mac垃圾清理软件哪个好

刚拿到全新的mac电脑却不知道该怎么使用&#xff1f;首先应该装什么软件呢&#xff1f;如果你有同样的疑惑&#xff0c;今天这篇文章一定不要错过。接下来小编为大家介绍mac十大必备软件排行榜&#xff0c;以及mac垃圾清理软件哪个好。 一、mac十大必备软件排行榜 1.CleanMyM…

剑指 Offer 32 - II. 从上到下打印二叉树 II

目录 题目思路BFS 题目来源 剑指 Offer 32 - II. 从上到下打印二叉树 II 题目思路 I. 按层打印&#xff1a; 题目要求的二叉树的 从上至下 打印&#xff08;即按层打印&#xff09;&#xff0c;又称为二叉树的 广度优先搜索&#xff08;BFS&#xff09;。BFS 通常借助 队列 的…

练好基本功,优秀工程师成长第一步

计算机基础作用 举例1&#xff1a;若是我们要开发大规模应用系统&#xff0c;如电商服务系统&#xff0c;要考虑很多 1. 这个服务应用要用什么语言来编写&#xff1f; 2. 是采用单体进程&#xff0c;还是用多个进程来协同工作&#xff1f; 3. 如何管理长期使用的内存空间&a…

ChatGPT在智能客服产品落地探讨

AI语言模型中的ChatGPT近期在互联网平台上引起了广泛的讨论。那么&#xff0c;如果想将这个大型语言模型应用在智能客服产品中&#xff0c;或者将其在ToB SaaS应用软件领域落地&#xff0c;应该采用哪种构建策略&#xff1f; 现在ChatGPT这个大型语言模型已经在各种平台获得了广…

RabbitMq-接收消息+redis消费者重复接收

在接触RammitMQ时&#xff0c;好多文章都说在配置中设置属性 # rabbitmq 配置 rabbitmq:host: xxx.xxx.xxx.xxxport: xxxxusername: xxxpassword: xxxxxx## 生产端配置# 开启发布确认,就是confirm模式. 消费端ack应答后,才将消息从队列中删除#确认消息已发送到队列(Queue)pub…

UDP的报文结构和注意事项

1.UDP的报文结构 UDP的报文结构如图&#xff1a; 画成一行会比较好理解&#xff1a; 主要由两部分组成&#xff1a;UDP报头和UDP载荷。 UDP载荷其实就是数据。 UDP报头分为四个部分&#xff0c;每个部分占两个字节。 源端口目的端口报文长度校验和 下面介绍报头里各个部分…
最新文章