У меня есть класс сотрудников со следующими полями.
class Employee {
final int id;
final String name;
final LocalDate updatedDate;
// setters and getters
}
У меня есть список сотрудников, список может содержать дубликатов сотрудников с разными updatedDate
. Теперь я хочу создать набор таким образом, чтобы он имел уникальную запись для каждого employeeId
. если есть повторяющиеся записи, следует сохранить ту, которая имеет самую последнюю updatedDate
.
Я пришел с предложенным ниже решением, отсортировал по updatedDate
и добавил TreeSet
, который поддерживает уникальность Id
. Я мог бы использовать HashSet
, реализовав хэш-код & equals в Employee.
List<Employee> employees = new ArrayList<>();
// sort
List<Employee> sortedList = employees.stream()
.sorted(Collections.reverseOrder(Comparator.comparing(employee -> employee.updatedDate)))
.collect(Collectors.toList());
Set<Employee> employeeSet = new TreeSet<>(Comparator.comparing( employee -> employee.id));
sortedList.forEach(employeeSet::add);
Теперь проблема, в большинстве случаев список сотрудников будет содержать уникальные элементы. очень редко встречаются повторяющиеся записи. Сортировка, когда присутствуют только уникальные записи, будет плохо масштабироваться. Есть ли способ улучшить вышеуказанное решение, избегая сортировки?