gpt4 book ai didi

java - 覆盖 ArrayList 中的 HashMap 中的值

转载 作者:太空狗 更新时间:2023-10-29 22:49:40 27 4
gpt4 key购买 nike

假设我有一个包含字符串键和整数值的 HashMap:

map = {cat=1, kid=3, girl=3, adult=2, human=5, dog=2, boy=2}

我想通过将此信息放入另一个 HashMap 来切换键和值。我知道 HashMap 不能有重复的键,所以我尝试将信息放入 HashMap 中,键的整数将映射到字符串 ArrayList,这样我就可以将一个整数映射到多个字符串:

swap = {1=[cat], 2=[adult, dog, boy], 3=[kid, girl], 5=[human]}

我尝试了以下代码:

HashMap<Integer, ArrayList<String>> swap = new HashMap<Integer, ArrayList<String>>();

for (String x : map.keySet()) {
for (int i = 0; i <= 5; i++) {
ArrayList<String> list = new ArrayList<String>();
if (i == map.get(x)) {
list.add(x);
swap.put(i, list);
}
}
}

我的代码中唯一的区别是我没有将数字 5 硬编码到我的索引中;我有一个方法可以在原始 HashMap 中找到最大的整数值并使用它。我知道它可以正常工作,因为即使我在其中硬编码 5,我也会得到相同的输出,只是为了节省空间而没有包含它。

我的目标是能够对任何数据集进行这种“反转”,否则我只能对值进行硬编码。我从上面的代码得到的输出是这样的:

swap = {1=[cat], 2=[boy], 3=[girl], 5=[human]}

如您所见,我的问题是值 ArrayList 仅保留放入其中的最后一个字符串,而不是收集所有字符串。如何让 ArrayList 存储每个字符串,而不仅仅是最后一个字符串?

最佳答案

使用 Java 8,您可以执行以下操作:

Map<String, Integer> map = new HashMap<>();

map.put("cat", 1);
map.put("kid", 3);
map.put("girl", 3);
map.put("adult", 2);
map.put("human", 5);
map.put("dog", 2);
map.put("boy", 2);

Map<Integer, List<String>> newMap = map.keySet()
.stream()
.collect(Collectors.groupingBy(map::get));

System.out.println(newMap);

输出将是:

{1=[cat], 2=[adult, dog, boy], 3=[kid, girl], 5=[human]}

关于java - 覆盖 ArrayList<String> 中的 HashMap 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45014994/

27 4 0