Как отсортировать список исходя из значений другого списка

Есть список с сотрудниками 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;
        }
    });
→ Ссылка