java - 如何在java 8中用流替换for循环
问题描述
我正在使用下面的方法,需要在 java 8 中使用流和 lamdas。
public static void addMemberships(final int key, MembershipData[] members) throws SpiderException
{
HashMap<String, MembershipData> duplicates = new HashMap<>();
for(MembershipData m: members) {
duplicates.putIfAbsent(m.subjectOfCare, m);
}
members = duplicates.values().toArray(new MembershipData[0]);
internalMembershipToolkit.verifyData(key, members);
}
我尝试使用members.forEach(duplicates.putIfAbsent(m.subjectOfCare, m)); 但它没有用。如何用流替换 for 循环?
解决方案
你不需要putIfAbsent
。您可以流式传输数组的元素并将它们收集到 a Map
,使用合并函数来消除重复项。
Map<String, MembershipData> duplicates =
Arrays.stream(members)
.collect(Collectors.toMap(m -> m.subjectOfCare,
Function.identity(),
(m1,m2)->m1));
或者,要在同一语句中包含到数组的转换:
members =
Arrays.stream(members)
.collect(Collectors.toMap(m -> m.subjectOfCare,
Function.identity(),
(m1,m2)->m1))
.values()
.toArray(new MembershipData[0]);
推荐阅读
- c++ - 发布代码的 gdb 堆栈跟踪可读性如何影响 x64?
- c - 试图知道为什么这段代码会导致无限循环
- javascript - 为什么 IIFE 不捕获其范围内的变量?
- sql - 将 nvarchar 值“1000050TPAR”转换为数据类型 int 时转换失败
- jsf - Primefaces 数据表 LazyDataModel 创建新行
- spring-boot - Mockito:在功能接口内监视函数调用?
- php - 运行带有变量 Clob 的函数时出错(PHP、Oracle、Laravel)
- python - 使用 Selenium Python 在 Chrome 中无头导航网站
- reactjs - 反应连接状态
- android - Android 上的 React Native Fetch 不会传递选项