Iteratorオブジェクトから特定の要素をフィルタリングしようとしていましたが、iterator.remove()
メソッドでfalse要素を削除できます。ここで java.util.Iterator.remove()メソッドが 'optional operation'のときはどういう意味ですか?
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;
}
、私はIterator.reomve()用のJava APIに見たとき、それは言っている:
void remove(): イテレータによって返された最後の要素を基になるコレクションから削除します(オプション操作)。このメソッドは、1回の呼び出しで1回だけ呼び出すことができます。このメソッドを呼び出す以外の方法で繰り返し処理が進行しているときに、基礎となるコレクションが変更された場合、反復子の動作は不明です。
なぜオプション操作なのか混乱しましたか? 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非常に明確で教育的です。 –