提取條目列表,然後對列表進行排序:
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);
}
}
謝謝。這將單獨對條目進行排序,但現在我不再有Multimap,只是Map.Entry對象的列表。所以我失去了對單個鍵值的分組。我想要的是保持Multimap,但只是重新排序元素,以便它們按照值的數量降序排列。 –
你說你想迭代條目。你有一個條目列表。迭代這些條目。 MultiMap仍然存在,未觸及。 MultiMap沒有排序,當然也不是按給定鍵值的數量。 –
對不起,我原來的問題不太清楚。我想能夠遍歷原始的Multimap,但是首先獲得最高的計數條目。此外,TreeMultimap對鍵(和值)進行了排序,所以說沒有對Multimap進行排序並不一定準確。 –