Java 集合 使HashMap 按 value 排序

public class TestSortedHashMap {

//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());

}


}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章