public class Map {
public static void main(String[] args) {
/**
* 集合中有字段integer,user;User 有name和age属性;
* 实现排序功能
*
*/
HashMap<Integer, User> user = new HashMap();
user.put(1, new User("张三", 25));
user.put(3, new User("李四", 22));
user.put(2, new User("王五", 28));
System.out.println("origin: "+user);
System.out.println("------------------------------------");
//算法实现
HashMap<Integer, User> sortHashMap = sortHashMap(user);
System.out.println("success: "+sortHashMap);
}
private static HashMap<Integer, User> sortHashMap(HashMap<Integer, User> map) {
//首先拿到map集合的键值对集合
Set<java.util.Map.Entry<Integer, User>> entrySet = map.entrySet();
//将set集合转为list集合,为了使用工具类方法
ArrayList<java.util.Map.Entry<Integer, User>> list = new ArrayList<java.util.Map.Entry<Integer, User>>(entrySet);
//使用Collection工具类排序(匿名内部类)
Collections.sort(list, new Comparator<java.util.Map.Entry<Integer, User>>() {
public int compare(java.util.Map.Entry<Integer, User> o1, java.util.Map.Entry<Integer, User> o2) {
// 按照要求根据 User 的 age 的倒序进行排
return o2.getValue().getAge()-o1.getValue().getAge();
}
});
//创建一个新的有序map集合
LinkedHashMap<Integer, User> linkedHashMap = new LinkedHashMap<Integer, User>();
for (java.util.Map.Entry<Integer, User> entry : list) {
linkedHashMap.put(entry.getKey(),entry.getValue());
}
return linkedHashMap;
}
}