Map in Java is sorted by value

Not much to say, on the code. Have 升序and 降序arrange.

package test;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class T_00 {
    
    

	public static void main(String[] args) {
    
    
		Map<String, Integer> m = new LinkedHashMap<String, Integer>();
		
		// 先构建一个map
		m.put("Apple", 3);
		m.put("Banana", 2);
		m.put("Pear", 1);
		m.put("Hotdog", 4);	
		for (String k: m.keySet()) {
    
    
			System.out.println(k+" "+m.get(k));
		}
		
		Map<String, Integer> m2 = reverseMap(m);
		System.out.println("====按照value排序后====");
		for (String k: m2.keySet()) {
    
    
			System.out.println(k+" "+m2.get(k));
		}
	}
	
	/**
	 * 将一个Map按照value排序
	 * @param m
	 * @return
	 */
	public static Map<String, Integer> reverseMap(Map<String, Integer> m){
    
    
		List<Map.Entry<String, Integer>> list = new ArrayList<>(m.entrySet());
		// 升序
		list.sort(Map.Entry.comparingByValue());
		// 降序
//		list.sort(Map.Entry.comparingByValue(Comparator.reverseOrder()));
		
		Map<String, Integer> m2 = new LinkedHashMap<String, Integer>();
		
		// 打印这个list,会得到一个用=号连着的值
		// 然后用split切分即可
		for (int i = 0; i < list.size(); i++) {
    
    
//			System.out.println(list.get(i));
			String key = list.get(i).toString().split("=")[0];
			int value = Integer.parseInt(list.get(i).toString().split("=")[1]);
			m2.put(key, value);
		}
		
		return m2;
	} 
}

Run screenshot

Insert picture description here

Guess you like

Origin blog.csdn.net/Awt_FuDongLai/article/details/109708091