1、创建一个测试用的Map
Map<String, Integer> map = new HashMap<>();
map.put("张三",15);
map.put("李四",13);
map.put("王二麻",99);
map.put("甲一",28);
map.put("丙二",9);
System.out.println(sortMap(map));
2、降序排序
/**
* description Map的value值降序排序
*
* @param map
* @return java.util.Map
* @version 1.0
* @date 2020/12/12 17:48
*/
public Map sortMap(Map<String, Integer> map) {
//获取entrySet
Set<Map.Entry<String, Integer>> mapEntries = map.entrySet();
//使用链表来对集合进行排序,使用LinkedList,利于插入元素
List<Map.Entry<String, Integer>> result = new LinkedList<>(mapEntries);
//自定义比较器来比较链表中的元素
Collections.sort(result, new Comparator<Map.Entry<String, Integer>>() {
//基于entry的值(Entry.getValue()),来排序链表
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
//将排好序的存入到LinkedHashMap(可保持顺序)中,需要存储键和值信息对到新的映射中。
Integer sort = 1;
Map<String, Integer> linkMap = new LinkedHashMap<>();
for (Map.Entry<String, Integer> newEntry : result) {
// 取出排名前5的值
if (sort <= 5) {
linkMap.put(newEntry.getKey(), newEntry.getValue());
++sort;
}
}
return linkMap;
}
打印结果:
{王二麻=99, 甲一=28, 张三=15, 李四=13, 丙二=9}
3、正序排序,将sortMap()方法里面的o1和o2的顺序调换
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o1.getValue().compareTo(o2.getValue());
}
打印结果:
{丙二=9, 李四=13, 张三=15, 甲一=28, 王二麻=99}