我想使用 Java 8 流对映射进行排序并返回其键的列表。
地图签名是:
Map<Integer, Integer> ranks = new HashMap<Integer, Integer>();
数据将类似于 [ 1=6, 5=13, 2=11 ]
我必须在两个条件下排序并返回键列表。
如果键的所有值都不同,则按降序排序并返回基于值的列表,例如
input [1=6 , 5=13 , 2= 11 , 4 = 14 ]
result [4,5,2,1]
如果键的两个或多个值具有相同的排名,则按升序返回这些相似的值,而项目的其余部分则按其值的降序排列,例如
input [2=6 , 5=13 , 1= 11 , 3=13 ,9 = 22 ] result [9,3,5,1,2]
下面的代码片段适用于条件 1,但不适用于条件 2。
List<Integer> ranksList = ranks.entrySet().stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.map(Map.Entry::getKey)
.limit(k)
.collect(Collectors.toList());
潇湘沐
守着一只汪
相关分类