使用单个项目实现Iterable接口

时间:2016-03-25 13:38:43

标签: java

我有这个片段,我想返回一个实例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() {

                    }
                };
            }
    };
}

2 个答案:

答案 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() {

                }
            };
        }
    };
}