我有:
Class 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());
行
答案 0 :(得分:1)
假设有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());
答案 1 :(得分:0)
不完全是一个答案只是指出我在代码中看到的错误是你无法打开流两次。在任何集合上打开流并应用终端操作后,它将无法重用。在这种情况下,终端操作是collect and foreach method
P.S。仍在等待50个声誉添加评论,所以只在答案部分添加评论