是否存在循环List,Queue,标准Java库中的其他内容?

时间:2014-05-14 22:17:27

标签: java collections

我正在寻找Java中的循环收集。我有Array中的一些玩家(他们等待轮到他们)但是我想将Array更改为循环收集,这样就可以更容易地获得下一个玩家。(我知道如何做到这一点,但我想使用已经用Java编写的循环收集。

1 个答案:

答案 0 :(得分:0)

您可以将任何Iterable转换为循环集合。继续永远请求Iterator

class Ring<T> implements Iterable<T> {
    // Source of all Iterators.
    final Iterable<T> it;
    // Current Iterator we are consuming.
    Iterator<T> i;

    public Ring(Iterable<T> it) {
        this.it = it;
        i = it.iterator();
    }

    @Override
    public Iterator<T> iterator() {
        return new Iterator<T> () {

            @Override
            public boolean hasNext() {
                // There's always a next for a Ring.
                return true;
            }

            @Override
            public T next() {
               if ( !i.hasNext() ) {
                   // Iterator is exhausted - make a new one!
                   i = it.iterator();
               }
               return i.next();
            }

        };
    }
}

public void test() {
    Ring<String> r = new Ring<>(Arrays.asList("One", "Two", "Three"));
    int printed = 0;
    for (String s : r) {
        System.out.println(s);
        if (++printed > 10) {
            break;
        }
    }
}

请注意,当包装的Iterable提供空迭代器时,会出现一个奇怪的边缘情况,但我会将该详细信息留给学生。