Pregunta

1 de la presentación dice "Estos métodos son perezosos!"

Iterable transform(Iterable, Function)*
Iterable filter(Iterable, Predicate)*
T find(Iterable<T>, Predicate)
Iterable concat(Iterable<Iterable>)
Iterable cycle(Iterable)
T getOnlyElement(Iterable<T>)
Iterable<T> reverse(List<T>)

Puede alguien ayudarme a entender lo que quieren decir con esto, digamos que tengo una colección de Persons y aplico un filtro para que solo las personas cuyo apellido es DOE.

Así que quiere decir esto que el "filtrado ocurre sólo en la primera llamada a doeOnly.next ()?"

List<Person> persons= ....
Iterable doeOnly= Iterables.filter(persons,DOE_AS_LAST_NAME_PREDICATE);
¿Fue útil?

Solución

Esto significa que los datos se filtran como usted lo solicita - que no pasa por su lista de inmediato, y construir una nueva lista de los datos filtrados. En cambio, cuando se llama iterator.next() (por ejemplo de forma automática en un bucle for mejorado) el iterador le pedirá su fuente de datos de subida (la colección) para el siguiente elemento de datos. A continuación, tratar de coincidir con este contra el filtro. Si coincide con ella, que va a volver ese elemento. De lo contrario, va a pedir otro elemento de la colección, manteniendo ir hasta que ya sea se queda sin elementos o encuentra una coincidencia.

A continuación, cuando siguiente pida el siguiente punto, que va a seguir adelante desde donde lo dejó.

En otras palabras, no sólo significa "la filtración ocurre sólo en la primera llamada a doeOnly.next()" - que significa "filtrado pasa en cada llamada a iterator.next()" donde iterator es el resultado de la llamada doeOnly.iterator().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top