Как отсортировать список исходя из значений другого списка
Есть список с сотрудниками List<Employee> employees и другой список List<Integer> employeeIds
Список сотрудников содержит поле Id, по которому и нужно произвести сортировку, а именно, чтобы сотрудники с Id (в списке employees), которые есть в списке employeeIds были в начале списка, а остальные в том же порядке.
Пробовал сделать такую сортировку, но список не изменился
employees.sort(Comparator.comparingInt(e -> employeeIds.indexOf(e.getEmployeeId())))
Ответы (1 шт):
Автор решения: aleshka-batman
→ Ссылка
Попробуйте вот так:
employees.sort((emp1, emp2) -> {
var containsFirst = employeeIds.contains(emp1.getId());
var containsSecond = employeeIds.contains(emp2.getId());
if (containsFirst) {
if (!containsSecond) {
return -1;
}
return employeeIds.indexOf(emp1.getId()) - employeeIds.indexOf(emp2.getId());
} else if (containsSecond) {
return 1;
} else {
return 0;
}
});