如何使用Java Stream从嵌套队伍列表提取每队最高分球员并汇总为列表
你当前写的代码league.stream().map(Team::getPlayers).collect(Collectors.toList())仅实现了将所有队伍的球员列表收集为嵌套集合List<List<Player>>,没有完成每支队伍的最高分球员筛选,这是当前卡住的核心原因。
实现思路
- 遍历每一支队伍,对该队的所有球员单独做分值最大值查询
- 过滤无球员队伍的空结果,提取有效最高分球员后汇总为列表
完整实现代码
import java.util.Comparator; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; public List<Player> getTopPlayersFromEachTeam(List<Team> league) { return league.stream() // 逐队查询该队得分最高的球员,用Optional兼容球员列表为空的边界场景 .map(team -> team.getPlayers().stream() .max(Comparator.comparingInt(Player::getScore))) // 过滤无有效球员的空结果 .filter(Optional::isPresent) // 提取Optional包装的球员实例 .map(Optional::get) .collect(Collectors.toList()); }
补充说明
如果业务规则可以100%保证每支队伍至少存在1名球员,可以省略空结果校验步骤,直接写成:
public List<Player> getTopPlayersFromEachTeam(List<Team> league) { return league.stream() .map(team -> team.getPlayers().stream() .max(Comparator.comparingInt(Player::getScore)) .get()) .collect(Collectors.toList()); }
该写法存在空指针风险,非特殊场景不推荐使用。
内容的提问来源于stack exchange,提问作者qul
相关产品推荐
相关产品推荐

