private static <K, V extends Comparable<? super V>> Map<K, V>
sortByValue(Map<K, V> map)
{
Map<K, V> result = new LinkedHashMap<>();
Stream<Map.Entry<K, V>> st = map.entrySet().stream();
st.sorted(Map.Entry.comparingByValue())
.forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
return result;
}
這是this後的示例。有用。問題在於它按升序排列。我怎樣才能改變它降序?排序降序排列圖java8
我是這樣做的:
public static <K, V extends Comparable<? super V>> Map<K, V>
sortByValue(Map<K, V> map)
{
List<Map.Entry<K, V>> list =
new LinkedList<Map.Entry<K, V>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<K, V>>()
{
public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2)
{
return (o2.getValue()).compareTo(o1.getValue());//change o1 with o2
}
});
Map<K, V> result = new LinkedHashMap<K, V>();
for (Map.Entry<K, V> entry : list)
{
result.put(entry.getKey(), entry.getValue());
}
return result;
}
我能做到這一點通過改變爲了我這一行:return (o2.getValue()).compareTo(o1.getValue());
但我想嘗試與拉姆達EXPR。
在我們回答之前,[你有什麼試過,你自己](/幫助/怎麼問)?你在哪裏尋找答案,你有什麼修飾,你是否查找過你在這段代碼中看到的API調用的文檔,等等? –
順便說一句,不要使用'.forEach/.forEachOrdered'來添加條目到地圖中,而是使用collect來收集'Collectors.toMap'。 –