Java лямбда-выражение: несовместимые типы: неверный тип возврата в лямбда-выражении - PullRequest
0 голосов
/ 29 апреля 2018

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

List<List<Integer>> jobs = new ArrayList<>();
for (int i = 0; i < difficulty.length; i++) {
    List<Integer> job = new ArrayList<Integer>();
    job.add(profit[i]);
    job.add(difficulty[i]);
    jobs.add(job);
}

Теперь я хочу отсортировать работы по их прибыли (первый элемент каждой работы), как показано ниже:

jobs.sort((j1, j2) -> j1.get(0) > j2.get(0));

Но получил следующую ошибку:

error: incompatible types: bad return type in lambda expression

Что я сделал не так и как это исправить? Спасибо!

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

Проблема в следующей строке

jobs.sort((j1, j2) -> j1.get(0) > j2.get(0));

означает, что вы не следуете сигнатуре метода сортировки:

default void sort(Comparator<? super E> c)

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

в вашем случае это должно быть что-то вроде этого:

jobs.sort((j1, j2) -> compare two lists somehow to return int);

или используйте фрагмент, предоставленный @ Aominè

0 голосов
/ 13 июля 2019

Я отвечу, потому что в моем случае проблема была с JDK

Я получаю bad return type компиляцию с JDK 1.8.56, поэтому я обновился до 1.8.211 и проблема ушла.

0 голосов
/ 29 апреля 2018

Ваш компаратор недопустим, так как возвращает boolean, тогда как ожидаемый тип возврата - int.

Простое решение будет:

jobs.sort(Comparator.comparing(e -> e.get(0)));

или

jobs.sort((j1, j2) -> Integer.compare(j1.get(0), j2.get(0)));
...