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

Java函数式编程:从棋子列表提取白骑士的BoardField列表

获取棋盘上所有白骑士的位置列表

直接给你补全代码,同时加一些实用的细节说明:

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

// 补全后的完整流操作
List<BoardField> whiteKnightPositions = chessmen.stream()
    .filter(chessman -> chessman.getSide().equals(Side.White))
    .filter(chessman -> chessman.getClass().equals(Knight.class))
    .map(Chessman::getBoardField) // 提取棋子对应的位置字段
    .collect(Collectors.toList()); // 收集为BoardField列表

关键步骤解释

  • map(Chessman::getBoardField):这一步把筛选后的Chessman对象,直接转换为它持有的BoardField实例——也就是我们最终要的位置信息。这里用了方法引用写法,比匿名lambda表达式chessman -> chessman.getBoardField()更简洁易读。
  • collect(Collectors.toList()):把流中的BoardField元素收集成普通的可变列表。如果你的项目使用Java 16及以上版本,也可以用Collectors.toUnmodifiableList()得到一个不可变列表,避免后续意外修改,根据业务需求选择即可。

额外优化建议

关于判断棋子类型的逻辑,如果你后续可能会有Knight的子类(比如MagicalKnight),用instanceof会比直接比较getClass()更灵活:

// 替换第二个filter,兼容Knight的子类场景
.filter(chessman -> chessman instanceof Knight)

这种写法会保留所有继承自Knight的棋子实例,而getClass().equals(Knight.class)只会匹配Knight本身的对象。如果你的场景里不会有子类,两种写法都可以。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:02:30