Java 从嵌套列表中获取最大值,并使用流将其转换为一个列表

Java 从嵌套列表中获取最大值,并使用流将其转换为一个列表,java,java-stream,Java,Java Stream,联盟有20支球队,球队有11名球员,球员有积分场 class Player { private int score; public int getScore() { return score; } } class Team { private List<Player> players; public List<Player> getPlayers

联盟有20支
球队
,球队有11名
球员
,球员有
积分

 class Player {
        private int score;

        public int getScore() {
            return score;
        }
    }

    class Team {
        private List<Player> players;

        public List<Player> getPlayers() {
            return players;
        }
    }

    class League {
        private List<Team> teams;

        public List<Team> getTeams() {
            return teams;
        }
    }
停留在:

league.stream().map(Team::getPlayers).collect(Collectors.toList())

有什么提示吗?

团队类可以有一个
最佳玩家
方法

public Player bestPlayer() {
    return players.stream().max(Comparator.comparing(Player::getScore)).orElseThrow();
}
联赛中
,每个队都很容易找到最好的球员:

public List<Player> getTopPlayersFromEachTeam() {
    return this.teams.stream().map(Team::bestPlayer).collect(Collectors.toList());
}
你可以做:

League league = new League(Arrays.asList(
        new Team(Arrays.asList(new Player(8), new Player(11))),
        new Team(Arrays.asList(new Player(15), new Player(12))),
        new Team(Arrays.asList(new Player(6), new Player(2), new Player(7)))
));

List<Player> bestPlayersInEachTeam = league.getTeams().stream()
        .map(team -> team.getPlayers().stream()        // Best from each team
                .max(Comparator.comparing(Player::getScore))
                .get())
        .collect(Collectors.toList());

System.out.println(bestPlayersInEachTeam);
public List<Player> getTopPlayersFromEachTeam() {
    return this.teams.stream()
            .map(t -> t.getPlayers().stream().max(Comparator.comparing(Player::getScore)).orElseThrow())
            .collect(Collectors.toList());
}
League l = new League(Arrays.asList(
        new Team(Arrays.asList(new Player(1), new Player(2), new Player(3))),
        new Team(Arrays.asList(new Player(10), new Player(20), new Player(30))),
        new Team(Arrays.asList(new Player(100), new Player(200), new Player(300)))
));

System.out.println(l.getTopPlayersFromEachTeam()); // [Player{score=3}, Player{score=30}, Player{score=300}]
League league = new League(Arrays.asList(
        new Team(Arrays.asList(new Player(8), new Player(11))),
        new Team(Arrays.asList(new Player(15), new Player(12))),
        new Team(Arrays.asList(new Player(6), new Player(2), new Player(7)))
));

List<Player> bestPlayersInEachTeam = league.getTeams().stream()
        .map(team -> team.getPlayers().stream()        // Best from each team
                .max(Comparator.comparing(Player::getScore))
                .get())
        .collect(Collectors.toList());

System.out.println(bestPlayersInEachTeam);
[Player(score=11), Player(score=15), Player(score=7)]