//HashMap 按照value 升序排列
@Test
public void HashMapValuesDown(){
Map<String , Integer> hashmap = new HashMap<>();
hashmap.put("acb1", 5);
hashmap.put("bac1", 3);
hashmap.put("bca1", 20);
hashmap.put("cab1", 80);
hashmap.put("cba1", 80);
hashmap.put("abc1", 10);
hashmap.put("abc2", 12);
hashmap.put("avcb2", 2);
hashmap.put("avcb1", 2);
//升序比较器
Comparator<Map.Entry<String, Integer>> valueUp = new Comparator<Map.Entry<String, Integer>>(){
public int compare(Entry<String, Integer> o1, Entry<String, Integer o2>){
return o1.getValue() - o2.getValue();
}
};
List<Map.Entry<String, Integer>> list = Collections.synchronizedList(new ArrayList<Map.Entry<String, Integer>(hashmap.entrySet()));
Collections.sort(list , valueUp);
for(Map.Entry<String , Integer> entry : list){
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
//*****************************************************************
//HashMap 按照value 降序排序@Test
public void HashMapValuesDown(){
Map<String , Integer> hashmap = new HashMap<>();
hashmap.put("acb1", 5);
hashmap.put("bac1", 3);
hashmap.put("bca1", 20);
hashmap.put("cab1", 80);
hashmap.put("cba1", 80);
hashmap.put("abc1", 10);
hashmap.put("abc2", 12);
hashmap.put("avcb2", 2);
hashmap.put("avcb1", 2);
//默认HashMap 按key的升序 排序的; 现在要求按value 降序排序? 怎么办?
// 实现 Comparator 接口 , 并 把map 转 list , 调用Collections.sort() 方法 对List 排序, 最后遍历输出
//1、降序比较器
Comparator<Map.Entry<String, Integer>> valueDownComparator = new Comparator<Map.Entry<String, Integer>>(){
@override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2){
return o2.getValue() - o1.getValue();
}
};
//2、map 转list
List<Map.Entry<String, Integer>> list = new ArrayList<>(ha'shmap.entrySet());
//3、Collections 调用 sort()方法 按 valueDownComparator 规则排序
Collections.sort(list , valueDownComparator);
//4、遍历 list
System.out.println("HashMap sorted by desc");
for(Map.Entry<String, Integer> entry : list){
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}