gpt4 book ai didi

java - 如何使用 java streams api 将分层 map 转换为平面 map

转载 作者:行者123 更新时间:2023-11-29 06:50:42 25 4
gpt4 key购买 nike

所以,我有这个函数,它接受一个映射,其中一个名称与数组中的多个不同索引之一相关联。索引号只会有一个与之关联的名称,因此没有重复项也没有空值,因此可以安全地使用以下函数展平层次结构。

public Map<Integer, Object> normalize( Map<Object, List<Integer>> hierarchalMap ) {

Map<Integer, Object> normalizedMap = new HashMap<>();
for (Map.Entry<Object, List<Integer>> entry : hierarchalMap.entrySet()) {
for (Integer integer : entry.getValue()) {
noramizedMap.put(integer, entry.getKey());
}
}
return normalizedMap;
}

我正在尝试将此函数更改为使用流 API,我已经做到了这一点:

Map<Integer, Object> noramizedMap = new HashMap<>();
for (Map.Entry<Object, List<Integer>> entry : vars.entrySet()) {

entry.getValue().forEach(e -> noramizedMap.put(e, entry.getValue()));

}

如果这是其他一些函数式语言,我会进行部分绑定(bind)或其他任何操作,但使用 Java 时,我会尝试将外循环解包到流中...collectTo 我只是迷路了。

最佳答案

假设我的评论是正确的,您可以像这样使用 Streams:

hierarchalMap.entrySet()
.stream()
.flatMap(entry -> entry.getValue()
.stream()
.map(i -> new AbstractMap.SimpleEntry<>(entry.getKey(), i)))
.collect(Collectors.toMap(Entry::getValue, Entry::getKey));

这假设没有重复项也没有空值。

关于java - 如何使用 java streams api 将分层 map 转换为平面 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49275580/

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