You need to enable JavaScript to run this app. 如何使用Java Stream从嵌套队伍列表提取每队最高分球员并汇总为列表
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java Stream从嵌套队伍列表提取每队最高分球员并汇总为列表

你当前写的代码league.stream().map(Team::getPlayers).collect(Collectors.toList())仅实现了将所有队伍的球员列表收集为嵌套集合List<List<Player>>,没有完成每支队伍的最高分球员筛选,这是当前卡住的核心原因。

实现思路

  1. 遍历每一支队伍,对该队的所有球员单独做分值最大值查询
  2. 过滤无球员队伍的空结果,提取有效最高分球员后汇总为列表

完整实现代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 21:45:03