2 回答
TA贡献1816条经验 获得超6个赞
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贡献1872条经验 获得超3个赞
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 需要 的类型规范<Integer, Integer>来comparingByValue推断 的类型Map.Entry.comparingByKey()。
添加回答
举报