gpt4 book ai didi

Java 流 : List of objects to HashMap without duplicates

转载 作者:行者123 更新时间:2023-12-01 09:53:32 28 4
gpt4 key购买 nike

我正在尝试转换 ListMap没有使用流的重复项,但我无法实现。

我可以使用这样的简单循环来做到这一点:

List<PropertyOwnerCommunityAddress> propertyOwnerCommunityAddresses = getPropertyOwnerAsList();

Map<Community, List<Address>> hashMap = new LinkedHashMap<>();

for (PropertyOwnerCommunityAddress poco : propertyOwnerCommunityAddresses) {

if (!hashMap.containsKey(poco.getCommunity())) {
List<Address> list = new ArrayList<>();
list.add(poco.getAddress());
hashMap.put(poco.getCommunity(), list);
} else {
hashMap.get(poco.getCommunity()).add(poco.getAddress());
}
}

但是当我尝试使用流时,我的思绪崩溃了。

不得不说 PropertyOwnerCommunityAddress还包含两个对象: CommunityAddress所有这一切的目标是为每个社区将地址保存在 key:value 中。配对不重复 Community目的。

任何人都可以帮助我吗?谢谢!

最佳答案

因为你可以有多个 Address es 每 Community您不能使用 toMap()收集器,但您需要使用 groupingBy() :

Map<Community, List<Address>> map = propertyOwnerCommunityAddresses.stream()
.collect(Collectors.groupingBy(
PropertyOwnerCommunityAddress::getCommunity,
Collectors.mapping(
PropertyOwnerCommunityAddress::getAddress,
Collectors.toList())
)
);

根据您的个人喜好,这可能看起来很困惑,而且可能比简单的 for 循环更复杂,也可以对其进行优化:
for(PropertyOwnerCommunityAddress poco : propertyOwnerCommunityAddresses) {
hashMap.computeIfAbsent(poco.getCommunity(), c -> new ArrayList<>()).add(poco.getAddress());
}

取决于您是否只想拥有唯一地址,您可能需要使用 Set ,所以更改 Collectors.toList()Collectors.toSet()或者当您继续使用 for 循环时,请更改 hashMap 的定义至 Map<Community, Set<Address>>并在循环中交换 new ArrayList<>()new HashSet<>()

关于Java 流 : List of objects to HashMap without duplicates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62298908/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com