Yotus:
私はポイントを持っている選手がいます。私は、ストリームとフィルターを使用してポイントの最大量を共有するすべてのプレイヤーを取得したいです。
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();