package test.maps;
import test.collections.Occupation;
import test.collections.Roll;
import java.util.*;
public class TreeMapTest {
public static void main(String[] args) {
TreeMap<Integer, Roll> treeMap = new TreeMap<>();
Roll roll1 = new Roll(1, Occupation.武士, "一点寒芒");
Roll roll2 = new Roll(15, Occupation.文人, "文文文");
Roll roll3 = new Roll(1, Occupation.异人, "毁天灭地");
Roll roll4 = new Roll(160, Occupation.武士, "一刀999");
treeMap.put(1, roll1);
treeMap.put(4, roll2);
treeMap.put(3, roll3);
treeMap.put(2, roll4);
//treeSet根据value排序
//1. 先获取键值对set
Set<Map.Entry<Integer,Roll>> entries = treeMap.entrySet();
//2. 再转为List
List<Map.Entry<Integer,Roll>> list = new ArrayList<>(entries);
//3. 传入比较器进行排序
list.sort(new Comparator<Map.Entry<Integer, Roll>>() {
@Override
public int compare(Map.Entry<Integer, Roll> o1, Map.Entry<Integer, Roll> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
for (Map.Entry<Integer,Roll> entry: list
) {
System.out.println(entry);
}
}
}
package test.collections;
import java.util.Comparator;
import java.util.Objects;
public class Roll implements Comparable<Roll> {
//等级
private int level;
//职业
private Occupation occupation;
//姓名
private String name = null;
public Roll(int level, Occupation occupation) {
this.level = level;
this.occupation = occupation;
}
public Roll(int level, Occupation occupation, String name) {
this.level = level;
this.occupation = occupation;
this.name = name;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public Occupation getOccupation() {
return occupation;
}
public void setOccupation(Occupation occupation) {
this.occupation = occupation;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Roll{" +
"level=" + level +
", occupation=" + occupation +
", name='" + name + '\'' +
'}';
}
@Override
public int compareTo(Roll o) {
return o.level - this.level;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Roll roll)) return false;
return level == roll.level && occupation == roll.occupation && Objects.equals(name, roll.name);
}
@Override
public int hashCode() {
return Objects.hash(level, occupation, name);
}
}
https://blog.youkuaiyun.com/xHibiki/article/details/82938480