我正在寻找Java中的循环收集。我有Array
中的一些玩家(他们等待轮到他们)但是我想将Array
更改为循环收集,这样就可以更容易地获得下一个玩家。(我知道如何做到这一点,但我想使用已经用Java编写的循环收集。
答案 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
提供空迭代器时,会出现一个奇怪的边缘情况,但我会将该详细信息留给学生。