问题来自:https://segmentfault.com/q/1010000008843265
将一个hashmap按照value排序。
思路:
将Map.entry放到List里,然后排序,排序后再放回去。
public class Person implements Comparable<Person>{
private int age;
private String name;
public Person(String name, int age) {
this.age = age;
this.name = name;
}
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;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
@Override
public int compareTo(Person o) {
return this.age - o.getAge();
}
}
public class Test {
@SuppressWarnings("Convert2Lambda")
public static void main(String[] args) {
Person p1 = new Person("a", 20);
Person p2 = new Person("c", 18);
Person p3 = new Person("v", 12);
Person p4 = new Person("t", 7);
Map<String, Person> map = new HashMap<>();
map.put("1", p1);
map.put("2", p2);
map.put("3", p3);
map.put("4", p4);
//将map.entrySet()放到List里
List<Map.Entry<String, Person>> list = new LinkedList<>(map.entrySet());
//按照Entry的value进行排序。
list.sort(new Comparator<Map.Entry<String, Person>>() {
public int compare(Map.Entry<String, Person> o1, Map.Entry<String, Person> o2) {
return (o1.getValue()).compareTo(o2.getValue());
}
});
//放回map
Map<String, Person> result = new LinkedHashMap<>();
for (Map.Entry<String, Person> entry : list) {
result.put(entry.getKey(), entry.getValue());
}
for (Map.Entry<String, Person> entry : result.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
}
}