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

联赛有20人Team,球队有11人Player,球员有int score场地。

 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;
        }
    }

需要从List<Team> 最好的Player和最高的中进行选择,score使用 StreamList<Player>从每个团队中返回一个包括一名最好的球员。

 public  List<Player> getTopPlayersFromEachTeam(List<Team> league) {
        // implementation
    }

卡在:

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

任何提示?

回答

Team班可以有一个bestPlayer方法

public Player bestPlayer() {
    return players.stream().max(Comparator.comparing(Player::getScore)).orElseThrow();
}

在 中League,很容易获得每支球队的最佳球员:

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

或多合一

public List<Player> getTopPlayersFromEachTeam() {
    return this.teams.stream()
            .map(t -> t.getPlayers().stream().max(Comparator.comparing(Player::getScore)).orElseThrow())
            .collect(Collectors.toList());
}

.orElseThrow()代码只是意味着,如果没有max球员可以发现,例如,如果一个球员名单Team是空的


测试代码

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}]


以上是从嵌套列表中获取最大值并使用流转换为一个列表的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>