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);
Другие вопросы по тегам