首页 > 解决方案 > java - 如何使用Java流获得具有相同最大值的所有对象?

问题描述

我有得分的球员。我想获得所有使用流和过滤器共享最大积分的玩家。

public class Player {
    private int points; // Getter omitted
}

我可以通过首先获得得分最高的玩家,然后过滤所有得分相同的玩家来做到这一点。

Player topPlayer = players.stream().max(Comparator.comparing(Player::getPoints)).orElse(null);

players.stream().filter(p -> p.getPoints() == topPlayer.getPoints()).collect(Collectors.toList());

这可以用单个谓词/单行来完成吗?

标签: javalambdajava-stream

解决方案


您可以收集到TreeMap第一个并且只获取最后一个条目(最大值所在的位置)

players.stream()
       .collect(Collectors.groupingBy(
           Player::getPoints,
           TreeMap::new,
           Collectors.toList()
       ))
       .lastEntry()
       .getValue();

推荐阅读