Yot*_*tus 6 java lambda java-stream
我有玩家有积分.我想让所有使用流和过滤器分享最大分数的玩家.
public class Player {
private int points; // Getter omitted
}
Run Code Online (Sandbox Code Playgroud)
我可以通过首先获得积分最多的玩家,并过滤所有具有相同金额的玩家来做到这一点.
Player topPlayer = players.stream().max(Comparator.comparing(Player::getPoints)).orElse(null);
players.stream().filter(p -> p.getPoints() == topPlayer.getPoints()).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
这可以通过单个谓词/单行完成吗?
您可以收集到TreeMap第一个并且只获取最后一个条目(最大值为)
players.stream()
.collect(Collectors.groupingBy(
Player::getPoints,
TreeMap::new,
Collectors.toList()
))
.lastEntry()
.getValue();
Run Code Online (Sandbox Code Playgroud)
首先按点分组并得到一个Map结果,然后在map中找到max key.时间成本为O(n):
List<Player> players = new ArrayList<>();
players.stream().collect(Collectors.groupingBy(Player::getPoints))
.entrySet().stream()
.max(Map.Entry.comparingByKey())
.ifPresent(System.out::println);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |