您可以使用该代码,例如:
Map<String, Trainer> source = new HashMap<>();
source.put("Z", new Trainer("z", 2));
source.put("B", new Trainer("b", 6));
source.put("C", new Trainer("c", 1));
source.put("D", new Trainer("d", 11));
LinkedHashMap<String, Trainer> result = source.entrySet().stream()
.sorted(Map.Entry.comparingByValue(Comparator.comparing(Trainer::getPoint)))
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue, (s1, s2) -> s1, LinkedHashMap::new));
输出:
{C=Trainer{name='c', point=1}, Z=Trainer{name='z', point=2}, B=Trainer{name='b', point=6}, D=Trainer{name='d', point=11}}
您已使用 LinkedHashMap 订购。
当您需要 TreeMap 时,请使用 new TreeMap(result);
如果您想按名称比较 Trainer 的对象,请将比较器更改为:
Comparator.comparing(Trainer::getName)
您还可以通过多个字段进行更严格的比较,例如:
Comparator.comparing(Trainer::getPoint).thenComparing(Trainer::getName)