You can use that code, for example:
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));
Output:
{C=Trainer{name='c', point=1}, Z=Trainer{name='z', point=2}, B=Trainer{name='b', point=6}, D=Trainer{name='d', point=11}}
You have ordered with LinkedHashMap.
When you need TreeMap use new TreeMap<>(result);
If you want to compare your Trainer's object by name change the comparator to:
Comparator.comparing(Trainer::getName)
Also you can have more hard comparing by several fields, for example:
Comparator.comparing(Trainer::getPoint).thenComparing(Trainer::getName)