【发布时间】:2017-05-23 05:18:09
【问题描述】:
我需要通过将所有重复条目合并到一个对象中来从一个可能有重复项的列表中生成一个唯一的朋友列表
示例 - 从不同的社交提要中获取朋友并放入 1 个大列表
1. 朋友 - [姓名:“约翰尼·德普”,出生日期:“1970-11-10”,来源:“FB”,fbAttribute:“..”]
2. 朋友 - [姓名:“Christian Bale”,出生日期:“1970-01-01”,来源:“LI”,liAttribute:“..”]
3. 朋友 - [姓名:“约翰尼·德普”,出生日期:“1970-11-10”,来源:“推特”,推特属性:“..”]
4. 朋友 - [姓名:“约翰尼·德普”,出生日期:“1970-11-10”,来源:“LinkedIn”,liAttribute:“..”]
5. 朋友 - [姓名:“Christian Bale”,出生日期:“1970-01-01”,来源:“LI”,liAttribute:“..”]
预期输出
1. 朋友 - [姓名:“Christian Bale”,出生日期:“1970-01-01”,liAttribute:“..”,fbAttribute:“..”,twitterAttribute:“..”]
2. 朋友 - [姓名:“约翰尼·德普”,出生日期:“1970-11-10”,liAttribute:“..”,fbAttribute:“..”,twitterAttribute:“..”]
问题 - 如何在不使用任何中间容器的情况下进行合并?我可以轻松地使用中间映射并对条目的每个值应用 reduce。
List<Friend> friends;
Map<String, List<Friend>> uniqueFriendMap
= friends.stream().groupingBy(Friend::uniqueFunction);
List<Friend> mergedFriends = uniqueFriendMap.entrySet()
.stream()
.map(entry -> {
return entry.getValue()
.stream()
.reduce((a,b) -> friendMergeFunction(a,b));
})
.filter(mergedPlace -> mergedPlace.isPresent())
.collect(Collectors.toList());
我喜欢在不使用中间地图 uniqueFriendMap 的情况下执行此操作。有什么建议吗?
【问题讨论】:
标签: java list merge java-stream reduce