gpt4 book ai didi

lambda - 使用 Java 8 Stream API 展平 map 并关联值

转载 作者:行者123 更新时间:2023-12-03 22:42:38 31 4
gpt4 key购买 nike

假设我有一组字符串到整数值的映射:Map<HashSet<String>, Integer> map = new HashMap<>() .

例如,map是(我们假设没有重复的字符串):

{x,y}   ->  2
{z} -> 3
{u,v,w} -> 4

我怎样才能得到 another_map类型 Map<String, Integer>如下,使用 Java 8 流 API :
x -> 2
y -> 2
z -> 3
u -> 4
v -> 4
w -> 4

它看起来像一个 flatMap操作,但如何将 Integer 值与每个 String 键正确关联?

最佳答案

您可以这样做创建中间 Map.Entry像这样的对象:

Map<String, Integer> result = map.entrySet().stream()
.<Entry<String, Integer>>flatMap(entry ->
entry.getKey()
.stream()
.map(s -> new AbstractMap.SimpleImmutableEntry<>(s, entry.getValue())))
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));

或者,您可以使用项目中的任何其他对/元组类型。

注意我的免费 StreamEx库支持以更简洁的方式处理此类情况(内部与上述相同):
Map<String, Integer> result = EntryStream.of(map).flatMapKeys(Set::stream).toMap();

EntryStream 类扩展 Stream<Map.Entry>并提供其他有用的方法,如 flatMapKeys toMap .

关于lambda - 使用 Java 8 Stream API 展平 map 并关联值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33748000/

31 4 0