对一个HashMap<Integer,User>,User有name和age属性,要求对HashMap排序,通过User中的age的倒序进行排序.
分析:我们都知道HashMap是无序的,而这道题要排序,而且还要按照User的age进行排序,我们新建了一个方法sortHashMap,在里面我们使用LinkedHashMap这个有序的子类,当我们使用Collections进行排序时,又发现第一个参数必须传输一个list,所以我们想办法怎么样把一个Map改成一个List,方法就是,Map先改为一个set,然后把Set改为一个list,最后把数据传到LinkedHashMap中,传回
先定义一个User类
public class User {
private String name;
private int age;
public int getAge() {
return age;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User="+name+"Age="+age;
}
}
import java.util.Scanner;
import java.util.*;
public class Solution {
public static void main(String[] args) {
HashMap<Integer,User> hashMap = new HashMap<Integer, User>();
User user = new User();
user.setName("张三");
user.setAge(23);
hashMap.put(1,user);
User user1 = new User();
user1.setName("李四");
user1.setAge(24);
hashMap.put(2,user1);
User user2 = new User();
user2.setName("王五");
user2.setAge(21);
hashMap.put(3,user2);
System.out.println("排序前"+hashMap);
HashMap<Integer,User> sortedHashmap = sortHashMap(hashMap);
System.out.println("排序前"+sortedHashmap);
}
private static LinkedHashMap<Integer,User> sortHashMap(HashMap<Integer,User> hashMap) {
//HashMap无序,所以使用HashMap的一个子类,有序的LinkedHashMap
LinkedHashMap newhashmap = new LinkedHashMap<Integer,User>();
//凡是要对集合排序,就使用工具类去排序
//因为只对list有用,所以先转换为set(map无法直接转换为list)
Set<Map.Entry<Integer,User>> entrySet = hashMap.entrySet();
ArrayList<Map.Entry<Integer,User>> list = new ArrayList<>(entrySet);
//对list排序
Collections.sort(list, new Comparator<Map.Entry<Integer, User>>() {
@Override
public int compare(Map.Entry<Integer, User> o1, Map.Entry<Integer, User> o2) {
return o2.getValue().getAge() - o1.getValue().getAge();
}
});
//将排好序的list转换为LinkedHashMap
for (int i=0;i<list.size();i++){
Map.Entry<Integer,User> entry = list.get(i);
newhashmap.put(entry.getKey(),entry.getValue());
}
return newhashmap;
}
}
网友评论