Сортировка списка в Java с использованием лямбды - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть список элементов списка, теперь я хочу отсортировать этот список с помощью лямбда-выражения, но получаю ошибку компиляции:

Вот рабочий код без лямбды:

Collections.sort(positions, new Comparator<List<Integer>>() {
    public int compare(List<Integer> ele1, List<Integer> ele2) {
        // some logic here
        return some_number;
    }
});

Теперь, используя lamda, я пытаюсь это:

positions.sort((List<Integer> ele1, List<Integer> ele2) -> {

});

Но получаю эту ошибку компиляции:

The method sort(Comparator<? super List<Integer>>) in the type List<List<Integer>> is not applicable for the arguments ((List<Integer> ele1, List<Integer> ele2) -> {})

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

В вашей лямбде отсутствует оператор return:

positions.sort((List<Integer> ele1, List<Integer> ele2) -> {
    // logic...
    return some_number;
});

Обратите внимание, однако, что идиоматический способ сортировки такого списка в Java 8 заключается в вызове Comparator#comparing:

positions.sort(Comparator.comparing(l -> logic_that_produces_some_comparable));
0 голосов
/ 03 ноября 2018

.sort ожидает функцию, которая принимает два списка и возвращает целое число.

Лямбда, которую вы указали, занимает два списка и ничего не возвращает.

Вам необходимо вернуть значение в лямбду.

...