Java Map自定义排序
Java Map自定义排序
实现案例:
介绍:
实现Map集合中的value降序,若value相同则按key值升序排列
知识点:
- 集合排序需要用的 List.sort();或Collections.sort();方法,所以要把HashMap转为List
- map.entrySet:就是把(key-value)作为一个整体一对一对地存放到Set集合当中,且Set类型应为:Set<Map.Entry<Integer, Integer>>
- 使用Lambda表达式作为比较器的参数,(o1, o2) -> {},其中返回的o1 - o2是正序;o2 - o1是倒序;
代码实现
public static void main(String[] args) {
HashMap<Integer, Integer> map = new HashMap<>();
map.put(21, 2);
map.put(23, 2);
map.put(24, 4);
map.put(9, 1);
List<Map.Entry<Integer, Integer>> sortedEntries = new ArrayList<>(map.entrySet());
Collections.sort(sortedEntries, ((o1, o2) -> {
if (o1.getValue() != o2.getValue()) {
return o2.getValue() - o1.getValue();
} else {
return o1.getKey() - o2.getKey();
}
}));
for (Map.Entry<Integer, Integer> entry : sortedEntries) {
System.out.println("release." + entry.getKey() + "." + entry.getValue());
}
}
/* 输出:
release.24.4
release.21.2
release.23.2
release.9.1
*/
因为HashMap是无序的,当排好序的集合可以使用LinkedHashMap来接收排好顺序的集合,如下:
LinkedHashMap<Integer, Integer> linkedHashMap = new LinkedHashMap<>();
for (Map.Entry<Integer, Integer> entry : sortedEntries) {
linkedHashMap.put(entry.getKey(), entry.getValue());
}
/* 输出 key=value
{24=4, 21=2, 23=2, 9=1}
*/