Вы должны использовать две вещи:
- Пользовательский компаратор
Map
реализация, поддерживающая сортировку - TreeMap
.
См. Фрагмент ниже:
// this is comparator that sorte `Student` accorgind to their `adminDate` ascending order
Comparator<Student> sortByAdminDateAsc = Comparator.comparingInt(one -> Integer.parseInt(one.adminDate));
// Use `TreeMap` with given comparator
Map<Student, List<Subject>> studentSubjects = new TreeMap<>(sortByAdminDateAsc);
// fill the map
studentSubjects.forEach((student, subjects) -> {
// student are sorted according to comparator
});
Если у вас уже есть HashMap
, тогда вы можете сделать что-нибудь. как это:
Map<Student, List<Subject>> studentSubjects = new HashMap<>();
Set<Student> sortedKeys = studentSubjects.keySet().stream().sorted(sortByAdminDateAsc).collect(Collectors.toSet());
Важное замечание: при использовании подхода с пользовательским компаратором вы не зависите от внутренней реализации равных и хэш-кода Стьюдента. Более того, вы можете использовать как можно больше компараторов для разных целей.