我试图过滤来自Iterator对象的特定元素,并且我可以通过iterator.remove()
方法删除false元素。当java.util.Iterator.remove()方法是'可选操作'时,这意味着什么?
这里是我的方法存根:
private static Iterator<A> process(Iterator<A> iter, Per p) {
while(iter.hasNext()){
A o = iter.next();
if(p.per(o)){
iter.remove();
}
}
return iter;
}
我可以去掉不相关的元素,但是当我看到到Java API来Iterator.reomve(),它说:
void remove(): 从底层集合中移除迭代器返回的最后一个元素(可选操作)。这种方法只能在下一次调用时调用一次。如果除了通过调用此方法以外的任何其他方式进行迭代时修改了底层集合,则未指定迭代器的行为。
我只是为什么它是一个可选操作感到困惑?是否让程序员在使用remove()方法时更加小心一个警告?或者它有其他含义?
感谢您提前寻求帮助。
而且整个代码我编译低于供大家参考:
package com.test.iterator;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorTest {
public static void main(String[] args) {
final IteratorTest it = new IteratorTest();
List<A> list = new ArrayList<A>(){{
add(it.new A(10));
add(it.new A(11));
add(it.new A(12));
add(it.new A(13));
add(it.new A(16));
}};
Iterator<A> iter = list.iterator();
iter = process(iter, it.new Per());
System.out.println("");
}
private static Iterator<A> process(Iterator<A> iter, Per p) {
while(iter.hasNext()){
A o = iter.next();
if(p.per(o)){
iter.remove();
}
}
return iter;
}
class A{
private String name;
private int age;
public A(int i){
this.age = i;
this.name = i + ",wang";
}
}
class Per{
public boolean per(A a){
if(a.age % 2 == 0){
return true;
}else{
return false;
}
}
}
}
+1很好的例子。 –
好榜样的好解释。 +1。 –
+1非常清晰和教育。 –