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

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

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

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

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

Let28资讯网——每日最新资讯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. 使用方法引用简化地图

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

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

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

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

2. 空值检查

上述代码加上空值检查。Let28资讯网——每日最新资讯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. 从流的流到流

以下代码获取所有公司的人员名单列表。Let28资讯网——每日最新资讯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;}

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

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

4. 按属性分组

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

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

5. 检查流中是否有项目

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

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

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

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

6. 记录日志

使用peek方法为每个返回的城市名记录日志。Let28资讯网——每日最新资讯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从流中移除重复的城市名称。Let28资讯网——每日最新资讯28at.com

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

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

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

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

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

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

标签:
  • 热门焦点
Top
Baidu
map