Можно ли вернуть Comparator
из java.util.function.Function
в Java?
Я попробовал это в следующем (надуманном) примере, но Eclipse сообщает мне о синтаксической ошибке ("Синтаксическая ошибка в токене "количество страниц", удалите этот токен"):
import java.util.Comparator;
import java.util.List;
import java.util.function.Function;
public class App
{
private record Book(Integer nrOfPages) {};
static Function<Integer, Comparator<Book>> byHasExactAmountOfPages = Integer amountOfPages -> (Book book1, Book book2) ->
{
if(book1.nrOfPages.equals(amountOfPages) && book2.nrOfPages.equals(amountOfPages))
{
return 0;
}
else if(!book1.nrOfPages.equals(amountOfPages) && !book2.nrOfPages.equals(amountOfPages))
{
return 0;
}
else if(book1.nrOfPages.equals(amountOfPages) && !book2.nrOfPages.equals(amountOfPages))
{
return -1;
}
else
{
return 1;
}
};
public static void main(String[] args)
{
List.of(new Book(1), new Book(2), new Book(3)).stream()
.sorted(byHasExactAmountOfPages.apply(2))
.forEach(System.out::print);
}
}
0
nistel
26 Янв 2022 в 15:38
1 ответ
Лучший ответ
Вы пропустили скобки вокруг аргумента:
here and here
( Integer amountOfPages ) -> (Book book1, Book book2) -> ...
2
udalmik
26 Янв 2022 в 15:44
3
И чтобы объяснить, почему (предположительно) @nistel здесь запутался: если вы опустите тип, и есть только 1 аргумент, вы можете опустить круглые скобки:
– amountOfPages -> (Book book1, Book book2) -> ....;
работает нормально. Но если у вас есть 0 или 2+ аргумента, или вы хотите использовать типы, круглые скобки обязательны.
rzwitserloot
26 Янв 2022 в 15:58
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].
static class PageCountComparator implements Comparator<Book>
с конструктором, принимающим целочисленный аргумент. (Вы уверены, что хотите использовать Integer, а не int? Действительно ли нормально, чтобы nrOfPages был нулевым?)