我有一个类 Game,其中包含一个类 Board,其中包含一个 ArrayList 的行。
目前 Game 可以 getCurrentRow() 并且当游戏进行时它会执行 getNextRow()。Board 获取 currentRow,从错误的一端循环遍历 ArrayList,并在每个步骤中将该行保存在 lastCheckedRow 中,并在找到 currentRow 时中断。nextRow 将变为 lastCheckedRow。很简单,但是很丑。
我想将这种方法改为流。是否可以创建一个仍可访问的流,并且在调用时一次只返回一个元素?
public class Board implements Skinnable{
private Stream<Skinnable> stream;
protected List<Skinnable> rowItems = new ArrayList<>();
private BoardRow currentRow;
private final BoardSkin skin;
public Board(Game game) {
for (int i = 0; i < 10; i++) {
rowItems.add(new BoardRow(game));
if (i == 9) {
setCurrentRow((BoardRow) rowItems.get(rowItems.size() - 1));
}
}
stream = rowItems.stream();
skin = new BoardSkin(this);
}
public void setCurrentRow(BoardRow row) {
currentRow = row;
currentRow.activate();
}
public Row getStreamedRowItem () {
List<Skinnable> collect = stream.limit(1).collect(Collectors.toList());
return (Row) collect.get(0);
}
}
这是有效的,一次,然后流被关闭。这更像是一个普遍的问题。我已经在这里和其他地方进行了搜索,但这对我来说太新了,所以我什至无法正确表达我的问题,因此我被卡住了。
杨魅力
相关分类