map 按value 排序

public Map sortByValue(Map<Integer,Integer> map){
		Map<Integer,Integer> res=new LinkedHashMap<Integer,Integer>();
		List<Map.Entry<Integer, Integer>> sortList=new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet());
		Collections.sort(sortList,new Comparator<Map.Entry<Integer, Integer>>(){

			@Override
			public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
				// TODO Auto-generated method stub
				return o2.getValue()-o1.getValue();
			}
			
		});
		for(Entry<Integer,Integer> en:sortList){
			res.put(en.getKey(), en.getValue());
		}
		return res;
		
	}

上面这种是肯定好用的

还有一种有问题的 再这也贴出来(代码是直接从别人那贴的)

public static void main(String[] args) {  
  
        HashMap<String,Double> map = new HashMap<String,Double>();  
        ValueComparator bvc =  new ValueComparator(map);  
        TreeMap<String,Double> sorted_map = new TreeMap<String,Double>(bvc);  
  
        map.put("A",99.5);  
        map.put("B",67.4);  
        map.put("C",67.4);  
        map.put("D",67.3);  
  
        System.out.println("unsorted map: "+map);  
  
        sorted_map.putAll(map);  
  
        System.out.println("results: "+sorted_map);  
    }  
}  
  
class ValueComparator implements Comparator<String> {  
  
    Map<String, Double> base;  
    public ValueComparator(Map<String, Double> base) {  
        this.base = base;  
    }  
  
    // Note: this comparator imposes orderings that are inconsistent with equals.      
    public int compare(String a, String b) {  
        if (base.get(a) >= base.get(b)) {  
            return -1;  
        } else {  
            return 1;  
        } // returning 0 would merge keys  
    }  
}  

问题:  重写 compare方法这   正常的话应该有3个返回,上面这个只有2个返回,导致排完序的map在取值时会遇到问题,比如:
 sorted_map.get("A")为null 。非要这样排取值 可以用 getValues()和getKeys();

完善一下compare() 方法: return base.get(a)-base.get(b) ,这样写在后来的取值会没有问题,但是遇到相同的value是加不进去的。 你们可以自己跑跑试试。

要按照mapvalue进行排序,可以使用Java中的Stream API和Collections类的reverseOrder方法。首先,将map的entrySet转换为stream,然后使用sorted方法对entry进行排序排序的依据是entry的value值。最后,使用forEach方法打印排序后的结果。以下是示例代码: ``` map.entrySet().stream() .sorted(Collections.reverseOrder(Map.Entry.comparingByValue())) .forEach(System.out::println); ``` 这段代码会按照mapvalue值进行降序排序,并打印排序后的结果。引用\[1\]中的代码片段展示了如何将map的字符键值对存储到map中。引用\[3\]中的代码片段展示了如何使用Stream API对map的entry进行排序。引用\[2\]中的代码片段展示了如何使用自己编写的快速排序算法对entry进行排序,并将排序后的结果存储到List中。 #### 引用[.reference_title] - *1* *3* [怎么对map中的value进行排序](https://blog.csdn.net/Emily_1021/article/details/97395928)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Mapvalue排序的几种方法](https://blog.csdn.net/GaleZhang/article/details/103842192)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值