java - 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());
这可以用单个谓词/单行来完成吗?
解决方案
您可以收集到TreeMap
第一个并且只获取最后一个条目(最大值所在的位置)
players.stream()
.collect(Collectors.groupingBy(
Player::getPoints,
TreeMap::new,
Collectors.toList()
))
.lastEntry()
.getValue();
推荐阅读
- sql - 查找数字是否总是增加/减少
- ios - 使用 processing() 快速运行命令行,但返回“错误域 = NSPOSIXErrorDomain 代码 = 13 权限被拒绝”
- mocking - 如何模拟期末课?
- google-chrome-devtools - 在 Chrome 开发工具调试器面板中,有没有办法重新排序部分?
- r - 如何在ggplot的文本框中使用LaTeX表达式
- amazon-web-services - AWS 上的动态客户端注册 OAuth2
- amazon-web-services - 将 AWS EFS 卷挂载到 Minikube
- javascript - 为什么我的打印预览使用 window.print 是空白的?
- sql - 重新编译变更表
- c# - 解压缩文件并将它们保存到 Blob 存储流