Java流来比较对象并返回该对象?

时间:2018-02-04 15:19:51

标签: java java-8 java-stream comparator

我有一个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 个答案:

答案 0 :(得分:5)

仔细看看你的尝试:

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);