2 回答

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
Comparator
您正在尋找這樣的定制:
.sorted((o1, o2) -> o2.getValue().compareTo(o1.getValue()) == 0 ? o1.getKey().compareTo(o2.getKey()) : o2.getValue().compareTo(o1.getValue()))
理論上,
首先按降序比較值,
o2.getValue().compareTo(o1.getValue())
然后如果它們相等,則按升序比較鍵
o1.getKey().compareTo(o2.getKey())
。

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊
Comparator聲明鏈接的使用thenComparing。
Comparator<Map.Entry<Integer, Integer>> entryComparator
= Map.Entry.<Integer, Integer>comparingByValue(Comparator.reverseOrder())
.thenComparing(Map.Entry.comparingByKey());
Map<Integer,Integer> ranks = Map.of(2, 6, 5, 13, 1, 11, 3, 13, 9, 22);
List<Integer> ranksList= ranks.entrySet().stream()
.sorted(entryComparator)
.map(Map.Entry::getKey).limit(47)
.collect(Collectors.toList());
System.out.println(ranksList);
輸出是所需的:
[9, 3, 5, 1, 2]
Java 需要 的類型規(guī)范<Integer, Integer>來comparingByValue推斷 的類型Map.Entry.comparingByKey()。
添加回答
舉報(bào)