java - [Java][功能] 将列表中的字段项收集到此类字段的列表中

标签 java list functional-programming

我有:

  • BoardField 类表示棋盘上的一 block 区域
  • 一个类 Chessman,代表棋子,如 Pawn、Knight、Queen 等。
  • 代表棋盘上所有棋子的列表。

Chessman 类有一个 BoardField 类型的字段

我想获得一份 职位 的列表,例如。棋盘上的所有白骑士。

这段代码会给我所有的白衣骑士:

    chessmen.stream()
            .filter(chessman -> chessman.getSide().equals(Side.White))
            .filter(chessman -> chessman.getClass().equals(Knight.class))
    .collect(Collectors.toList());

只获取白骑士位置的代码是什么?

以下内容

        chessmen.stream()
            .filter(chessman -> chessman.getSide().equals(Side.White))
            .filter(chessman -> chessman.getClass().equals(Knight.class))
            .collect(Collectors.toList())
            .stream()
            .forEach(chessman -> chessman.getField())
            .collect(Collectors.toList());

不工作 - 行编译错误.collect(Collectors.toList());

最佳答案

假设有 Chessman::position 返回一个 BoardField,它应该很简单

chessmen.stream()
        .filter(chessman -> chessman.getSide().equals(Side.White))
        .filter(chessman -> chessman.getClass().equals(Knight.class))
        .map(Chessman::position)
        .collect(Collectors.toList());

这是

的缩写形式
chessmen.stream()
        .filter(chessman -> chessman.getSide().equals(Side.White))
        .filter(chessman -> chessman.getClass().equals(Knight.class))
        .map(chessman -> chessman.position())
        .collect(Collectors.toList());

关于java - [Java][功能] 将列表中的字段项收集到此类字段的列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49601143/

相关文章:

将函数应用于列表并通过输入获得最高结果的 Scala 方法

c# - .net 正则表达式转换为 java @"(?<!\\)(?' M'[^|%])"?

java - 如何为 MapFactory 指定比较器

python - 使用条件检查对嵌套列表中的元素求和

arrays - Groovy:从其自身的列表中删除和对象?

error-handling - 在大型 Mathematica 项目中设置诊断错误消息

java - 男性和女性字符串的正则表达式是什么

java - Thread.currentThread() 总是返回相同的实例吗?

R如何在列表中找到向量子集的交集

list - 整数列表中最长子序列的长度