Java 从嵌套列表中获取最大值,并使用流将其转换为一个列表
联盟有20支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
球队
,球队有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)]