我有这个片段,我想返回一个实例board
来测试解决方案。什么是返回单个项目并耗尽迭代器的好方法?
将其置于final List
,然后将其清空为唯一选项?
public Iterable<Board> solution() {
return new Iterable<Board>() {
@Override
public Iterator<Board> iterator() {
return new Iterator<Board>() {
@Override
public boolean hasNext() {
return false; // change this
}
@Override
public Board next() {
return board; // This does not work
}
@Override
public void remove() {
}
};
}
};
}
答案 0 :(得分:5)
我认为你可能会过度思考这一点,任何Collection
都是Iterable
,所以你可以做一些简单的事情:
public Iterable<Board> solution() {
return Collections.singleton(board);
}
答案 1 :(得分:0)
@nickb给出的答案让我看到Singleton如何实现迭代器,我可以提出以下方法(用于我的学习/测试)。 对于生产代码,我更喜欢@ nickb的答案。
public Iterable<Board> solution() {
return new Iterable<Board>() {
/**
* Returns an iterator over a set of elements of type T.
*
* @return an Iterator.
*/
@Override
public Iterator<Board> iterator() {
return new Iterator<Board>() {
private boolean hasNext = true;
@Override
public boolean hasNext() {
return hasNext;
}
@Override
public Board next() {
if (hasNext) {
hasNext = false;
}
return board;
}
@Override
public void remove() {
}
};
}
};
}