Java потоки для сравнения между объектами и вернуть этот объект?
У меня есть ArrayList
объекта класса, как показано ниже:
ArrayList<Score> scoreboard = new ArrayList<>();
Score
класс имеет поле points
:
class Score {
private int points;
//constructor and methods
}
Как мне использовать потоки Java для сравнения points
в каждом из этого Score
объект и вернуть объект с самым высоким / самым низким значением?
Я пробовал что-то вроде этого, но это не сработало:
scoreboard
.stream()
.max(Comparator.comparing(Score::getPoints)
.get()
.forEach(System::println);
1 ответ
Решение
Посмотрите внимательно на то, что вы пытались:
scoreboard.stream().max(Comparator.comparing(Score::getPoints).get().forEach(System::println);
Здесь вы пытаетесь создать Comparator
:
Comparator.comparing(Score::getPoints).get().forEach(System::println)
и вы не сбалансировали скобки; и вы используете несуществующий метод, System::println
,
Поставьте скобки в нужном месте:
Score maxScore = scoreboard.stream().max(Comparator.comparingInt(Score::getPoints)).get();
// Extra ^
Затем распечатайте это:
System.out.println(maxScore);
Или, если вы не уверены, что поток не пустой:
Optional<Score> opt = scoreboard.stream().max(...);
opt.ifPresent(System.out::println);