Estaba tratando de filtrar elementos específicos de un objeto Iterator, y puedo eliminar los elementos falsos a través del método iterator.remove()
.¿Qué significa cuando el método java.util.Iterator.remove() es 'operación opcional'?
Aquí es mi método talón:
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;
}
puedo eliminar los elementos no relacionados, pero cuando miro en el API Java para Iterator.reomve(), es decir:
void remove(): Elimina de la colección subyacente el último elemento devuelto por el iterador (operación opcional). Este método se puede llamar solo una vez por llamada al siguiente. El comportamiento de un iterador no se especifica si la colección subyacente se modifica mientras la iteración está en progreso de ninguna otra manera que llamando a este método.
Acabo de confundir por qué es una operación opcional? ¿Es una advertencia que el programador tenga más cuidado al usar el método remove()? o tiene otros significados?
Gracias a todos por adelantado por ayuda.
Y todo el código que estaba compilando está por debajo de su referencia:
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 Buen ejemplo. –
Buena explicación con buen ejemplo. +1. –
+1 Muy claro y educativo. –