gpt4 book ai didi

java - 遍历 Map 中的列表

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:31:10 25 4
gpt4 key购买 nike

迭代“非规范化”集合映射的最佳方法是什么?

例如,我有以下 map :

Map<String, List<String>> relations;

为了遍历每个键->每个值,我做了类似的事情:

for (Entry<String,List<String>> e : relations.entries()) {
for (String s : e.getValue()) {
System.out.println(e.getKey() + " - " + s);
}
}

有没有什么优雅的方法可以用一些装饰器来解决这个问题?

我希望找到类似的东西:

for(Entry e : Collections.getDenormalizeEntriesFromMapOfCollection(myMap)) {
System.out.println(e.getKey() + " - " + e.getValue());
}

这会产生相同的结果,只是在第二种情况下,每个键都有一个条目 -> 集合项。

最佳答案

我建议您看看 guavas MultiMap执行。它已经有了这种迭代器:

转换 Map<K, Collection<V>MultiMap<K, V>您可以使用实用方法:

public static <K,V> Multimap<K,V> toMultiMap(Map<K,? extends Collection<V>> m) {

LinkedListMultimap<K, V> multimap = LinkedListMultimap.create();

for (Entry<K, ? extends Collection<V>> e : m.entrySet())
multimap.putAll(e.getKey(), e.getValue());

return multimap;
}

用法:

public static void main(String[] args) {

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

map.put("Hello", Arrays.asList(1, 2));
map.put("World!", Arrays.asList(3));

Multimap<String, Integer> multimap = toMultiMap(map);

Iterator<Entry<String, Integer>> it = multimap.entries().iterator();

while (it.hasNext())
System.out.println(it.next());
}

输出:

Hello=1
Hello=2
World=3

关于java - 遍历 Map 中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10893687/

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