gpt4 book ai didi

java - 使用java中的lambda表达式将一个映射转换为另一个映射的最简单方法

转载 作者:行者123 更新时间:2023-11-30 06:43:04 25 4
gpt4 key购买 nike

这个问题可能看起来与其他问题类似,但我搜索的大多数问题都涉及将一个 map 复制到另一个 map 或具有原始数据类型。

我的第一个 map 包含文件名的 map 和该文件包含的标签列表。

Map<String, List<String>> map1

现在我想转换上面的 map1 ,以便它创建一个标签映射,其中包含包含这些标签的文件列表。我已经使用传统方法实现了它,但我想要比创建循环和迭代列表更有效的方法。

Eg:- map1 = [{file1, [@tag1, @tag2]},{file2, [@tag3, @tag1]}]
-->
map2 = [{@tag1, [file1, file2]}, {@tag2, [file1]}, {@tag3, [file2]}]

最佳答案

使用 Java 8 流的一种方法是将条目映射到对(字符串、字符串),然后按代表标记值的一个对它们进行分组并收集到映射。

在这种情况下,传统方法可能会更有效。

Map<String, List<String>> map1 = new HashMap(){{
put("file1", Arrays.asList("@tag1", "@tag2"));
put("file2", Arrays.asList("@tag3", "@tag1"));
}};
Map<String, List<String>> map2 = map1.entrySet()
.stream()
.flatMap(entry -> entry.getValue()
.stream()
.map(tag -> new SimpleEntry<>(tag, entry.getKey())))
.collect(Collectors.groupingBy(
SimpleEntry::getKey,
Collectors.mapping(SimpleEntry::getValue, Collectors.toList()))
);
System.out.println(Arrays.toString(map2.entrySet().toArray()));

结果是:

[@tag2=[file1], @tag3=[file2], @tag1=[file2, file1]]

关于java - 使用java中的lambda表达式将一个映射转换为另一个映射的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44089380/

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