gpt4 book ai didi

java - 按值的数量对 Guava Multimap 进行排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:01:16 28 4
gpt4 key购买 nike

如果我有一个 Guava Multimap,我将如何根据给定键的值数量对条目进行排序?

例如:

Multimap<String, String> multiMap = ArrayListMultimap.create();
multiMap.put("foo", "1");
multiMap.put("bar", "2");
multiMap.put("bar", "3");
multiMap.put("bar", "99");

鉴于此,当遍历 multiMap 时,我如何让“bar”条目排在第一位(因为“bar”有 3 个值,而“foo”只有 1 个值)?

最佳答案

提取列表中的条目,然后对列表进行排序:

List<Map.Entry<String, String>> entries = new ArrayList<Map.Entry<String, String>>(map.entries());
Collections.sort(entries, new Comparator<Map.Entry<String, String>>() {
@Override
public int compare(Map.Entry<String, String> e1, Map.Entry<String, String> e2) {
return Ints.compare(map.get(e2.getKey()).size(), map.get(e1.getKey()).size());
}
});

然后遍历条目。

编辑:

如果您实际上想要遍历内部映射 (Entry<String, Collection<String>>) 的条目,则执行以下操作:

List<Map.Entry<String, Collection<String>>> entries = 
new ArrayList<Map.Entry<String, Collection<String>>>(map.asMap().entrySet());
Collections.sort(entries, new Comparator<Map.Entry<String, Collection<String>>>() {
@Override
public int compare(Map.Entry<String, Collection<String>> e1,
Map.Entry<String, Collection<String>> e2) {
return Ints.compare(e2.getValue().size(), e1.getValue().size());
}
});

// and now iterate
for (Map.Entry<String, Collection<String>> entry : entries) {
System.out.println("Key = " + entry.getKey());
for (String value : entry.getValue()) {
System.out.println(" Value = " + value);
}
}

关于java - 按值的数量对 Guava Multimap 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7881629/

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