Java 流式编程的7个技巧,必学!

作为Java开发者,我们还没有完全掌握Java Streams这个多功能工具的威力。在这里,你将发现一些有价值的技巧,可以作为参考并应用到你的下一个项目中。

Java Streams在很多年前就被引入了,但作为Java开发者,我们还没有完全掌握这个多功能工具的威力。在这里,你将发现一些有价值的技巧,可以作为参考并应用到你的下一个项目中。

在下面的示例中,我们将使用以下类。

复制

@Getter
class Company {private String name;private Address address;private List personList;
}@Getter
class Person {private Long id;private String name;
}@Getter
class Address {private String street;private City city;
}@Getter
class City {private String name;private State state;
}@Getter
class State{private String name;
}
1. 使用方法引用简化地图

以下代码可获取公司地址的城市名称。

复制

public List getCityNames(List companyList){return companyList.stream().map(company -> company.getAddress().getCity().getName()).toList();
}

可以替换为以下更具可读性的版本。

复制

public List getCityNames(List companyList){return companyList.stream().map(Company::getAddress).map(Address::getCity).map(City::getName).toList();
}
2. 空值检查

上述代码加上空值检查。

复制

public List getCityNames(List companyList){return companyList.stream().map(Company::getAddress).filter(Objects::nonNull).map(Address::getCity).filter(Objects::nonNull).map(City::getName).filter(Objects::nonNull).toList();
}
3. 从流的流到流

以下代码获取所有公司的人员名单列表。

复制

public List getAllPerson(List companyList){// 生成一个Person列表的列表List> partialResult = companyList.stream().map(Company::getPersonList).toList();// 将每个Person列表添加到结果中List result = new ArrayList<>();partialResult.forEach(result::addAll);return result;
}

可以用以下方式实现相同的功能。

复制

public List getAllPerson(List companyList){return companyList.stream().map(Company::getPersonList) // 返回一个Stream>.flatMap(List::stream)  // 返回一个Stream.toList(
4. 按属性分组

以下代码将返回一张地图,其中包含每个城市的公司列表。

复制

public Map> getCompaniesByCity(List companyList){return companyList.stream().collect(Collectors.groupingBy(company -> company.getAddress().getCity()));
}
5. 检查流中是否有项目

以下代码会检查是否有公司在某个城市。

复制

public boolean hasCompanyInCity(List companyList, String cityName){return companyList.stream().map(Company::getAddress).map(Address::getName).anyMatch(cityName::equals);
}

同样的方法也适用于noneMatch,如果你想检查某个城市是否有公司。

复制

public boolean hasNoCompanyInCity(List companyList, String cityName){return companyList.stream().map(Company::getAddress).map(Address::getName).noneMatch(cityName::equals);
}
6. 记录日志

使用peek方法为每个返回的城市名记录日志。

复制

public List getCityNames(List companyList){return companyList.stream().map(Company::getAddress).map(Address::getCity).map(City::getName).peek(cityName -> log.info(cityName)).toList();
}
7. 获取唯一的城市名称

使用distinct从流中移除重复的城市名称。

复制

public List getUniqueCityNames(List companyList){return companyList.stream().map(Company::getAddress).map(Address::getCity).map(City::getName).distinct().toList();
}

以上就是通过实例展示的7个技巧,希望对你有所帮助。

作为开发者,我们需要保持好奇心和学习热情,不断探索新的技术,只有这样,我们才能在这个快速发展的时代中立于不败之地。介绍一款程序员都应该知道的软件JNPF快速开发平台,很多人都尝试用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。

JNPF可以实现应用从创建、配置、开发、测试到发布、运维、升级等完整生命周期的管理。减少了传统应用程序的代码编写量,通过图形化、可视化的界面,以拖放组件的方式,即可快速生成应用程序的产品,大幅降低了开发企业管理类软件的难度。

当然,我更建议大家成为一个全栈,不要把自己的定位局限于前端。

感谢阅读本文

如果有什么建议,请在评论中让我知道。我很乐意改进。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TEMU半托管模式引领跨境电商新风尚

TEMU半托管模式作为2024年的热门话题&#xff0c;正吸引着越来越多卖家的目光。继全托管模式取得巨大成功之后&#xff0c;半托管模式的推出无疑为跨境电商行业注入了新的活力。 在选品方向上&#xff0c;TEMU半托管模式强调商品的聚焦与精选。卖家在选择上架商品时&#xff0c…

Mysql需要知道的点

目录 一、数据库的三范式是什么 二、Mysql数据库引擎有哪些 三、说说Innodb与MYISAM的区别 四、数据库的事务 五、索引是什么 六、优化手段有哪些 七、简单说一说 drop&#xff0c;delete与truncate的区别 八、什么是视图 九、什么是内连接、左外连接、右外连接&#x…

Spring中的InitializingBean接口

使用方法 Slf4j Component public class MyBean implements InitializingBean {public MyBean() {log.info("> 构造方法");}Overridepublic void afterPropertiesSet() throws Exception {log.info("> afterPropertiesSet方法");} }Spring中的Bean注…

Hive-存储-文件格式

一、前言 数据存储是Hive的基础&#xff0c;选择合适的底层数据存储格式&#xff0c;可以在不改变Hql的前提下得到大的性能提升。类似mysql选择适合场景的存储引擎。 Hive支持的存储格式有 文本格式&#xff08;TextFile&#xff09; 二进制序列化文件 &#xff08;SequenceF…

vue2 + dataV 组件问题

在使用 dataV 过程中&#xff0c;遇见 svg 动画不加载问题。 一、理想状态下&#xff1a; 二、开发中遇到的 加载不出来问题。 解决方案 在查找官方资料中&#xff0c;提到使用 key 可以解决方案。 1 绑定 key 2 改变 key 值 注意&#xff1a;一定要在 $nextTick 里面执…

【多线程】线程安全

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 观察线程不安全2. 线程不安全的原因2.1 抢占式执行2.2 修改共享数据2.3 修改操作不是原子的2.4 内存可见性…

【高级篇】分区与分片:MySQL的高级数据管理技术(十三)

引言 在上一章,我们探讨了MySQL的主从复制与高可用性,这是构建健壮数据库架构的基石。现在,让我们深入到更高级的主题——分区与分片,这些技术对于处理大规模数据集和提升数据库性能至关重要。我们将详细介绍表分区的概念、类型及分片技术的应用,为下一章讨论MySQL集群与…

经纬恒润推出面向教育行业的仿真测试实验室

随着汽车行业向电动化和智能化的转型&#xff0c;车辆的智能水平和复杂度不断提升&#xff0c;整车的开发周期却越来越短&#xff0c;测试要求越来越高&#xff0c;自动化测试成为必由之路。作为行业技术创新和引领者&#xff0c;高校面临着新能源和智能驾驶等新技术的众多挑战…

HTML(15)——盒子模型

盒子模型组成 内容区域 -width&height内边距-padding &#xff08;出现在内容与盒子边缘之间&#xff09;边框线-border外边距-margin &#xff08;出现在盒子外面&#xff09; div { width: 200px; height: 200px; background-color: rgb(85, 226, 193); padding: 20px; …

如何降低MCU系统功耗?

大家在做MCU系统开发的时候&#xff0c;是否也碰到过降低MCU系统功耗的需求&#xff1f; MCU系统整板功耗是个综合的数据&#xff0c;包括MCU功耗以及外部器件功耗&#xff0c;在此我们主要介绍如何降低MCU的功耗&#xff1a; 可以在满足应用的前提下&#xff0c;降低MCU的运…

百元蓝牙耳机哪款性价比高?盘点性价比高的百元蓝牙耳机品牌

在如今快节奏的生活中&#xff0c;蓝牙耳机已经成为人们日常生活中不可或缺的配件。然而&#xff0c;市面上百元左右性价比高的蓝牙耳机琳琅满目&#xff0c;消费者往往难以选择到一款质量好、耐用的产品。我们希望可以为广大消费者提供一些参考和建议&#xff0c;接下来&#…

KVM网络模式设置

一、KVM网络模式介绍 1、NAT ( 默认上网 ) 虚拟机利用host机器的ip进行上网,对外显示一个ip;virbr0是KVM 默认创建的一个 Bridge,其作用是为连接其上的虚机网卡提供NAT访问外网的功能,默认ip为192.168.122.1 2、自带的Bridge 将虚拟机桥接到host机器的网卡上,vm和ho…

vue 实现 word/excel/ppt/pdf 等文件格式预览操作

效果图&#xff1a; 问题描述&#xff1a;一般情况下使用iframe标签就可以实现文件预览&#xff0c;但是这个标签只针对于ppt和pdf是有效的。对于doc文件就需要借助第三方插件&#xff08;vue-office/docx&#xff09;来实现预览了。下面介绍使用方法。 安装插件&#xff1a;n…

云通SIPX,您的码号资源智能调度专家!

在数字化转型的浪潮中&#xff0c;号码资源作为企业与客户沟通的重要桥梁&#xff0c;其管理效率直接关系到企业运营的成败。随着运营商对号码资源管理的规范化和精细化&#xff0c;企业对高效、智能的号码资源管理需求日益增长&#xff0c;以实现对外呼叫的降本增效。 一、什么…

教程:LVM操作讲解

LVM简介 在系统运维过程中&#xff0c;对磁盘扩缩容是常见的操作。如何高效的管理磁盘容量&#xff0c;lvm提供了很好的解决方案。 LVM将磁盘抽象成PV、VG、LV&#xff0c;方便用户进行磁盘管理&#xff0c;简单来讲&#xff0c;是由物理磁盘划分成PV&#xff0c;PV加入到具体…

【AI大模型RAG】深入探索检索增强生成(RAG)技术

目录 1. 引言2. RAG技术概述2.1 RAG技术的定义2.2 RAG技术的工作原理2.3 RAG技术的优势2.4 RAG技术的应用场景 3. RAG的工作流程3.1 输入处理3.2 索引建立3.3 信息检索3.4 文档生成3.5 融合与优化 4. RAG范式的演变4.1 初级 RAG 模型4.2 高级 RAG 模型4.3 模块化 RAG 模型优化技…

HBase:大数据时代的分布式存储利器

HBase&#xff1a;大数据时代的分布式存储利器 HBase&#xff1a;大数据时代的分布式存储利器1. HBase简介2. HBase特点3. HBase应用场景4. 总结 HBase&#xff1a;大数据时代的分布式存储利器 随着互联网和大数据技术的飞速发展&#xff0c;数据存储和计算需求呈现出爆炸式增…

el-select多选超过两个选项省略

前言 相信大家都遇到过这种情况&#xff1a;Element下拉框多选的时候有个毛病&#xff0c;就是选的数量过多就会把下拉框撑高&#xff0c;从而影响布局&#xff1b;但是如果使用了里面collapse-tags属性&#xff0c;element设置的只显示一个&#xff0c;超过一个就隐藏省略了&…

wps的domain转为shp矢量

wps的namelist制作、python出图和转矢量 简介 wps&#xff08;WRF Preprocessing System&#xff09;是中尺度数值天气预报系统WRF(Weather Research and Forecasting)的预处理系统。 wps的安装地址在GitHub上&#xff1a;https://github.com/wrf-model/WPS 下载完成后&…

一步步带你解锁Stable Diffusion:老外都眼馋的 SD 中文提示词插件分享

大家好我是极客菌&#xff01;今天我们继续来分享一个外国人都眼馋的 SD 中文提示词插件。 那我们废话不多说&#xff0c;直接开整。 SD 的插件安装&#xff0c;小伙伴们应该都会了吧&#xff0c;我这里再简单讲下哦&#xff0c;到「扩展」中的「可下载」中点击「加载扩展列表…