1、问题
已知一个HashMap< Integer,User>集合,User有 name(String) 和 age(int) 属性,请写一个方法实现对HashMap的排序功能。该方法接收HashMap< Integer,User>为形参,返回类型为HashMap< Integer,User>,需要对HashMap中的User的age进行排序,排序中key:value键值对不能拆开。
tips:LinkedHashMap是有序的HashMap,且是HashMap的子类。
2、解决步骤
(1)创建一个有序的HashMap数据结构,LinkedHashMap;
(2)Map不能直接转化为List集合,先将Map转化为Set集合(hashMap.entrySet());
(3)将Set转化为List集合;
(4)使用工具类对List进行排序,Collections.sort(list,new Conparator());
(5)对排序好的list遍历,放入LinkedHashMap。
3.代码实现
(1)User实体类
public class User {
private int age;
private String name;
private String sex;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User [age=" + age + ", name=" + name + ", sex=" + sex + "]";
}
}
(2)实现排序和测试
public class SortHashMap {
public static void main(String[] args) {
HashMap<Integer, User> testData = new HashMap<Integer, User>();
User user1 = new User();
user1.setAge(21);
user1.setName("chun1");
user1.setSex("男");
testData.put(1, user1);
User user2 = new User();
user2.setAge(19);
user2.setName("chun2");
user2.setSex("男");
testData.put(2, user2);
User user3 = new User();
user3.setAge(24);
user3.setName("chun3");
user3.setSex("男");
testData.put(3, user3);
System.out.println("before sort:"+testData);
System.out.println("after sort:"+Fun_SortHashMap(testData));
}
private static HashMap<Integer, User> Fun_SortHashMap(HashMap<Integer, User> hashMap) {
LinkedHashMap<Integer, User> newHash = new LinkedHashMap<>();
Set<Entry<Integer, User>> tempSet = hashMap.entrySet();
ArrayList<Entry<Integer, User>> tempList = new ArrayList(tempSet);
Collections.sort(tempList, new Comparator<Entry<Integer, User>>() {
@Override
public int compare(Entry<Integer, User> o1, Entry<Integer, User> o2) {
return o2.getValue().getAge() - o1.getValue().getAge();
}
});
for(int i = 0;i < tempList.size();i ++) {
newHash.put(tempList.get(i).getKey(), tempList.get(i).getValue());
}
return newHash;
}
}