Вопрос интервьюера в одном из моих интервью.
We have
Employeeclass withid,firstName, andlastNamefields and getters and setters of these fields. We do not have source code of this class, it is in JAR. We are usingEmployeeinstances as the key inTreeMap. Now we want to sort thisTreeMapbased on theEmployeeidfield.
Я знаю, что мы можем использовать интерфейс Comparable для сортировки, но как мы можем его использовать, если у нас нет исходного кода?
Почему исходный код вообще может быть актуален?
Используйте компаратор, например stackoverflow.com/questions/18720800/…
@lexicore Тот факт, что у вас нет исходного кода, не позволяет вам реализовать класс Comparable. Они хотят альтернативы, то есть для ответа, что вы можете дать Comparator на TreeMap конструктор. Это тест, чтобы увидеть, насколько вы знакомы с TreeMap, одним из наиболее распространенных классов в Java Runtime Library.
Возможный дубликат Сортировка карты с помощью компаратора
@Andreas Вы не можете заставить сторонний класс реализовать Comparable независимо от того, доступен ли исходный код или нет. Поэтому я до сих пор не понимаю, насколько важна доступность исходного кода.
@contrapost Конечно дубликат, но только для тех, кто уже знает :) Если кто не знает о существовании Comparator, то вопрос разные. Он должен оставаться здесь.




На основе Комментарий Андреаса:
Поскольку у вас нет исходного кода, вы не можете использовать сопоставимый интерфейс. И цель вашего интервьюера - заставить вас использовать альтернативу. Эта альтернатива - использовать Компаратор.
Я дам поискать, как им пользоваться (вот пример)
У вас есть два варианта:
Employee и реализация производного класса Comparable<...>Comparator<Employee> и передайте его в качестве параметра конструктору TreeMap.Первое - больше проблем, чем оно того стоит, потому что вы имеете дело с другим классом. Итак, давайте посмотрим на использование Comparator.
final Comparator<Employee> employeeComparator = Comparator
.comparing(Employee::getLastName)
.thenComparing(Employee::getFirstName);
final SortedMap<Employee, String> map = new TreeMap<>(employeeComparator);
Это определяет компаратор как лямбда Java 8, который сначала сравнивает фамилию, а затем имя.
Вы можете использовать компаратор.