集合Map根据Value排序

集合Map根据Value排序

TreeMap采用“红黑树”的排序二叉树来保存Map中的每个Entry。每个Entry为红黑树的一个节点。

所有的Entry总是根据key按指定的规则保持有序

现在是普通的Map集合(HashMap)要根据Value值来排序,下面贴代码:

/**
 * 根据Map集合的value排序
 */
@Test
public void test8765() {
    Map<Student, Integer> studentScoreMap = new HashMap<Student, Integer>();
    studentScoreMap.put(new Student("lyx", 12), 100);
    studentScoreMap.put(new Student("lyx", 12), 99);
    studentScoreMap.put(new Student("lyx", 14), 98);
    studentScoreMap.put(new Student("lyx", 6), 97);
    studentScoreMap.put(new Student("lyx", 18), 96);
    studentScoreMap.put(new Student("lyx", 190), 95);
    studentScoreMap.put(new Student("lyx", 6), 94);
    studentScoreMap.put(new Student("lyx", 5), 93);

    List<Map.Entry<Student, Integer>> entryList =
            new ArrayList<Map.Entry<Student, Integer>>(studentScoreMap.entrySet());

    Collections.sort(entryList, new Comparator<Map.Entry<Student, Integer>>() {
        @Override
        public int compare(Map.Entry<Student, Integer> o1, Map.Entry<Student, Integer> o2) {
            Integer i1 = o1.getValue();
            Integer i2 = o2.getValue();
            return i1 - i2;
        }
    });

    for (Map.Entry<Student, Integer> e : entryList) {
        System.out.println("Student=" + e.getKey().toString() + ",Score=" + e.getValue());
    }
}

运行结果:

Student=Student{name='lyx', age=5},Score=93
Student=Student{name='lyx', age=6},Score=94
Student=Student{name='lyx', age=190},Score=95
Student=Student{name='lyx', age=18},Score=96
Student=Student{name='lyx', age=6},Score=97
Student=Student{name='lyx', age=14},Score=98
Student=Student{name='lyx', age=12},Score=99
Student=Student{name='lyx', age=12},Score=100


===END===


你可能感兴趣的:(集合Map根据Value排序)