Инициализация PriorityQueue с помощью компаратора - PullRequest
0 голосов
/ 09 февраля 2020

Компилятору (Java 8) сообщается, что в следующем коде нет подходящего конструктора:

PriorityQueue<ListNode> heap = new PriorityQueue((ListNode n1, ListNode n2) -> n1.val - n2.val)

Однако, если создать Comparator заранее и затем передать его в PriorityQueue, то

Comparator<ListNode> c = (ListNode n1, ListNode n2) -> n1.val - n2.val;
PriorityQueue<ListNode> heap = new PriorityQueue(c);

Интересно, почему первый подход не удался? Это потому, что компилятор не может вывести тип Comparator из лямбда-выражения?

1 Ответ

3 голосов
/ 09 февраля 2020

Вы используете этот PriorityQueue(Comparator<? super E> comparator) конструктор. И вы не предоставили тип для E, где E должно быть ListNode. Чтобы исправить свой код, просто напишите его так:

PriorityQueue<ListNode> heap = new PriorityQueue<ListNode>((ListNode n1, ListNode n2) -> n1.val - n2.val);
// or
PriorityQueue<ListNode> heap = new PriorityQueue<>((ListNode n1, ListNode n2) -> n1.val - n2.val);
...