如何在 Java 中创建自定义迭代器?
How to create a custom Iterator in Java?
我有这个问题:
Given the iterable class Foo
, which keeps always only one int
value which is set on its constructor, make an iterator so it
respects all of its restrictions which are: you can't change the int
value after its initialization. You should include only the required
exceptions to be thrown.
好的,到目前为止,如果我以正确的方式理解这个问题,我应该为那个 Foo
class 创建一个迭代器,但是我以前从未这样做过,它似乎是这个问题本身有点误导。是清单吗?还是不应该?无论如何,尽管如此,我只想知道如何创建它。
现在我有了这个:
public class Foo implements Iterable<Foo> {
@Override
public Iterator<Foo> iterator() {
throw new UnsupportedOperationException("Not supported yet.");
}
}
但我什至不知道这样做是否正确。
如果有人能帮我解决这个问题,我将不胜感激。
提前致谢。
一个最小的例子是 return 一个空迭代器,它的 hasNext()
总是 returns false
和 next()
将抛出 NoSuchElementException
.
public Iterator<Foo> iterator() {
return new Iterator<Foo>() {
public boolean hasNext() {
return false;
}
public Foo next() {
throw new NoSuchElementException();
}
};
}
当然大多数迭代器都有状态。例如,您可以从 0
迭代到 Foo
实例持有的整数值。
import java.util.Iterator;
import java.util.NoSuchElementException;
public class Foo implements Iterable<Foo> {
private final int value;
public Foo(final int value) {
this.value = value;
}
@Override
public Iterator<Foo> iterator() {
return new Iterator<Foo>() {
private Foo foo = new Foo(0);
@Override
public boolean hasNext() {
return foo.value < Foo.this.value;
}
@Override
public Foo next() {
if (!hasNext()) throw new NoSuchElementException();
Foo cur = foo;
foo = new Foo(cur.value+1);
return cur;
}
};
}
public static void main(String[] args) {
Foo foo = new Foo(10);
for (Foo f: foo) {
System.out.println(f.value);
}
}
}
我有这个问题:
Given the iterable
class Foo
, which keeps always only oneint
value which is set on its constructor, make an iterator so it respects all of its restrictions which are: you can't change theint
value after its initialization. You should include only the required exceptions to be thrown.
好的,到目前为止,如果我以正确的方式理解这个问题,我应该为那个 Foo
class 创建一个迭代器,但是我以前从未这样做过,它似乎是这个问题本身有点误导。是清单吗?还是不应该?无论如何,尽管如此,我只想知道如何创建它。
现在我有了这个:
public class Foo implements Iterable<Foo> {
@Override
public Iterator<Foo> iterator() {
throw new UnsupportedOperationException("Not supported yet.");
}
}
但我什至不知道这样做是否正确。 如果有人能帮我解决这个问题,我将不胜感激。
提前致谢。
一个最小的例子是 return 一个空迭代器,它的 hasNext()
总是 returns false
和 next()
将抛出 NoSuchElementException
.
public Iterator<Foo> iterator() {
return new Iterator<Foo>() {
public boolean hasNext() {
return false;
}
public Foo next() {
throw new NoSuchElementException();
}
};
}
当然大多数迭代器都有状态。例如,您可以从 0
迭代到 Foo
实例持有的整数值。
import java.util.Iterator;
import java.util.NoSuchElementException;
public class Foo implements Iterable<Foo> {
private final int value;
public Foo(final int value) {
this.value = value;
}
@Override
public Iterator<Foo> iterator() {
return new Iterator<Foo>() {
private Foo foo = new Foo(0);
@Override
public boolean hasNext() {
return foo.value < Foo.this.value;
}
@Override
public Foo next() {
if (!hasNext()) throw new NoSuchElementException();
Foo cur = foo;
foo = new Foo(cur.value+1);
return cur;
}
};
}
public static void main(String[] args) {
Foo foo = new Foo(10);
for (Foo f: foo) {
System.out.println(f.value);
}
}
}