我試圖過濾來自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非常清晰和教育。 –