С правой стороны отсутствует оператор diamond, из-за которого компилятор не выводит тип аргумента как ListNode
(он выводит его как объект и, следовательно, вы не можете получить доступ к val
)
Попробуйтеthis
PriorityQueue<ListNode> heap = new PriorityQueue<>(lists.length,
(l1, l2) -> l1.val < l2.val ? -1 :
l1.val == l2.val ? 0 :
1);
Мой первоначальный ответ:
Если у вас есть объявление PriorityQueue в другом пакете (из того, где объявлено ListNode
):
Это не имеет никакого отношения к троичному оператору.Переменная val
является закрытой для пакета.Обнародование этого вопроса решит проблему, но это не очень хорошая практика.Вместо этого добавьте для него getter и сделайте переменные экземпляра приватными (если у вас нет причин делать их закрытыми для пакета)
public int getVal() {
return val;
}
PriorityQueue<ListNode> heap = new PriorityQueue<>(lists.length,
(l1, l2) -> l1.getVal() < l2.getVal() ? -1 :
l1.getVal() == l2.getVal() ? 0 :
1);