gpt4 book ai didi

Java 8 将 Map> 流式传输到 Map>

转载 作者:行者123 更新时间:2023-12-01 18:05:02 25 4
gpt4 key购买 nike

我想转换(使用 Java 8 流)Map<Long, List<MyClass>>Map<Long, Set<Long>>其中Set<Long>代表id每个MyClass List的.

我已经尝试过:

myFirstMap.entrySet().stream()
.map(e -> e.getValue().stream()
.map(MyClass::getId)
.collect(Collectors.toSet()))

但我不知道如何获得结果。

最佳答案

您正在映射 Map.Entry 的实例至Set<Long>实例意味着失去原始 map 键的跟踪,从而无法将它们收集到具有相同键的新 map 中。

第一个选项是映射 Map.Entry<Long, List<MyClass>>实例到Map.Entry<Long, Set<Long>>实例,然后将条目收集到新 map 中:

Map<Long, Set<Long>> result=
myFirstMap.entrySet().stream()
.map(e -> new AbstractMap.SimpleImmutableEntry<>(e.getKey(),
e.getValue().stream().map(MyClass::getId).collect(Collectors.toSet())))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

另一种方法是融合 mapcollect步入其中,在提供给 toMap 的值函数中进行正确的转换 Collection 家:

Map<Long, Set<Long>> result=
myFirstMap.entrySet().stream().collect(Collectors.toMap(
Map.Entry::getKey,
e -> e.getValue().stream().map(MyClass::getId).collect(Collectors.toSet())));

这样,您就可以避免创建新的 Map.Entry实例并获得更简洁的代码,但是,灵 active 较差,因为您无法在中间链接其他流操作。

关于Java 8 将 Map<Long, List<MyClass>> 流式传输到 Map<Long, Set<Long>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37180619/

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