You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现team.getPlayers().playing()链式调用?求Java代码方案

实现链式调用:team.getPlayers().playing() 方案

核心思路

要实现这种链式调用,关键在于getPlayers()不能直接返回JDK原生的List<Player>(原生List没有playing()方法),而是返回一个自定义的Player集合类,在这个类中实现playing()方法来过滤可参赛的玩家。

具体实现步骤

1. 自定义Player集合类

创建一个包装List<Player>的类,比如PlayerCollection,添加playing()方法筛选符合条件的玩家:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class PlayerCollection {
    private final List<Player> players;

    // 构造方法:传入原始玩家列表,做拷贝避免外部修改内部状态
    public PlayerCollection(List<Player> players) {
        this.players = new ArrayList<>(players);
    }

    // 实现playing()方法:返回仍可参赛的Player列表
    public List<Player> playing() {
        return players.stream()
                .filter(Player::isEligibleToPlay) // 假设Player类有判断参赛资格的方法
                .collect(Collectors.toList());
    }

    // 可选:提供获取原始列表的方法
    public List<Player> getRawPlayers() {
        return new ArrayList<>(players);
    }
}

2. 修改Team类的getPlayers()方法

将原来返回List<Player>的方法,改为返回自定义的PlayerCollection:

import java.util.List;

public class Team {
    private List<Player> players;

    // 构造方法及其他业务逻辑省略

    public PlayerCollection getPlayers() {
        return new PlayerCollection(players);
    }
}

3. 链式调用示例

现在可以直接按需求调用:

Team team = new Team();
// 初始化团队玩家列表...

List<Player> activePlayers = team.getPlayers().playing();

替代方案:基于Stream的简化实现

如果不想自定义集合类,也可以让getPlayers()返回Stream<Player>,通过链式过滤实现类似效果:

// 修改Team类的getPlayers()
public Stream<Player> getPlayers() {
    return players.stream();
}

// 调用时直接链式筛选
List<Player> activePlayers = team.getPlayers()
        .filter(Player::isEligibleToPlay)
        .collect(Collectors.toList());

这种方式无需自定义类,但调用格式是getPlayers().filter(...).collect(...),若要严格匹配playing()的命名,自定义集合类的方案更贴合需求。

注意事项

  • 确保Player类已实现判断参赛资格的方法(比如isEligibleToPlay()),若没有需先补充该逻辑。
  • 自定义集合类中对传入列表做拷贝,避免外部修改影响内部数据的一致性。

内容的提问来源于stack exchange,提问作者Developer Team

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:42:09