当前位置:首页 > 科技  > 软件

Java 流式编程的七个必学技巧

来源: 责编: 时间:2024-06-25 17:13:49 254观看
导读Java Streams在很多年前就被引入了,但作为Java开发者,我们还没有完全掌握这个多功能工具的威力。在这里,你将发现一些有价值的技巧,可以作为参考并应用到你的下一个项目中。在下面的示例中,我们将使用以下类。@Getterclass

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

在下面的示例中,我们将使用以下类。u9x28资讯网——每日最新资讯28at.com

u9x28资讯网——每日最新资讯28at.com

@Getterclass Company {  private String name;  private Address address;  private List personList;}@Getterclass Person {  private Long id;  private String name;}@Getterclass Address {  private String street;  private City city;}@Getterclass City {  private String name;  private State state;}@Getterclass State{  private String name;}

1. 使用方法引用简化地图

以下代码可获取公司地址的城市名称。u9x28资讯网——每日最新资讯28at.com

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

可以替换为以下更具可读性的版本。u9x28资讯网——每日最新资讯28at.com

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

2. 空值检查

上述代码加上空值检查。u9x28资讯网——每日最新资讯28at.com

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. 从流的流到流

以下代码获取所有公司的人员名单列表。u9x28资讯网——每日最新资讯28at.com

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;}

可以用以下方式实现相同的功能。u9x28资讯网——每日最新资讯28at.com

public List getAllPerson(List companyList){  return companyList.stream()    .map(Company::getPersonList) // 返回一个Stream>    .flatMap(List::stream)  // 返回一个Stream    .toList(

4. 按属性分组

以下代码将返回一张地图,其中包含每个城市的公司列表。u9x28资讯网——每日最新资讯28at.com

public Map> getCompaniesByCity(List companyList){  return companyList.stream()    .collect(Collectors.groupingBy(company -> company.getAddress().getCity()));}

5. 检查流中是否有项目

以下代码会检查是否有公司在某个城市。u9x28资讯网——每日最新资讯28at.com

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

同样的方法也适用于noneMatch,如果你想检查某个城市是否有公司。u9x28资讯网——每日最新资讯28at.com

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

6. 记录日志

使用peek方法为每个返回的城市名记录日志。u9x28资讯网——每日最新资讯28at.com

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从流中移除重复的城市名称。u9x28资讯网——每日最新资讯28at.com

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

以上就是通过实例展示的7个技巧,希望对你有所帮助。u9x28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-96419-0.htmlJava 流式编程的七个必学技巧

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Vue 点击弹窗外部,实现弹窗关闭?你有实现的思路吗?

下一篇: LangChain转换链:让数据处理更精准

标签:
  • 热门焦点
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • 三言两语说透设计模式的艺术-简单工厂模式

    一、写在前面工厂模式是最常见的一种创建型设计模式,通常说的工厂模式指的是工厂方法模式,是使用频率最高的工厂模式。简单工厂模式又称为静态工厂方法模式,不属于GoF 23种设计
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • 大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 华为发布HarmonyOS 4:更好玩、更流畅、更安全

    在8月4日的华为开发者大会2023(HDC.Together)大会上,HarmonyOS 4正式发布。自2019年发布以来,HarmonyOS一直以用户为中心,经历四年多的发展HarmonyOS已
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • 引领旗舰级影像能力向中端机普及 OPPO K11 系列发布 1799 元起

    7月25日,OPPO正式发布K系列新品—— OPPO K11 。此次 K11 在中端手机市场长期被忽视的影像板块发力,突破性地搭载索尼 IMX890 旗舰大底主摄,支持 OIS
  • 华为举行春季智慧办公新品发布会 首次推出电子墨水屏平板

    北京时间2月27日晚,华为在巴塞罗那举行春季智慧办公新品发布会,在海外市场推出之前已经在中国市场上市的笔记本、平板、激光打印机等办公产品,并首次推出搭载
Top