一. 问题背景
将Map<Integer, User>中的User中的age进行倒叙排序。
二. 解决
package com.atguigu;
import java.util.*;
public class Main {
public static void main(String[] args) {
HashMap<Integer, User> hmap = new HashMap<Integer, User>();
hmap.put(1, new User("zhangsan", 12));
hmap.put(2, new User("lisi", 19));
hmap.put(3, new User("wangwu", 15));
Set<Map.Entry<Integer, User>> entrySet = hmap.entrySet();
List<Map.Entry<Integer, User>> list = new ArrayList<Map.Entry<Integer,
User>>(hmap.entrySet());
System.out.println(list);
Collections.sort(list, new Comparator<Map.Entry<Integer, User>>() {
@Override
public int compare(Map.Entry<Integer, User> o1, Map.Entry<Integer, User> o2) {
if(o1.getValue().getAge() > o2.getValue().getAge()) {
return -1;
}else if(o1.getValue().getAge() == o2.getValue().getAge()) {
return 0;
}else{
return 1;
}
}
});
System.out.println(list);
}
}
解释: compare()方法里面,第一个if的条件o1.getValue().getAge() > o2.getValue().getAge()
,可以这样理解这个条件:当前是o1的age比o2的age要大,符合倒叙的规则,所以返回-1,-1代表符合规则,不进行调整顺序。 如果相等,则返回0;否则返回1