Domanda

1 della presentazione dice: "Questi metodi sono pigro!"

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>)

Qualcuno può aiutarmi a capire cosa intendono per questo, consente di dire che ho una collezione di Persons e applico un filtro per restituire solo le persone il cui cognome è DOE.

Quindi, questo significa che il "filtraggio avviene solo sulla prima chiamata a doeOnly.next ()?"

List<Person> persons= ....
Iterable doeOnly= Iterables.filter(persons,DOE_AS_LAST_NAME_PREDICATE);
È stato utile?

Soluzione

Ciò significa che i dati vengono filtrati come lo si richiede - non va attraverso la vostra lista immediatamente, e costruire un nuovo elenco dei dati filtrati. Invece, quando si chiama iterator.next() (ad esempio automaticamente in una maggiore ciclo for) l'iteratore chiederà la sua fonte di dati a monte (la vostra collezione) per la voce successiva di dati. Sarà quindi cercare di far corrispondere questo contro il filtro. Se corrisponde, esso tornerà tale elemento. In caso contrario, si chiederà per un altro elemento della collezione, mantenendo andare fino a che non sia esaurisce le voci o trova una corrispondenza.

Poi, quando si Avanti richiedere la voce successiva, sarà andare avanti dal punto in cui era stato interrotto.

In altre parole, non solo significa "filtraggio avviene solo sulla prima chiamata a doeOnly.next()" - significa "filtrazione avviene su ogni call to iterator.next()" dove iterator è il risultato della chiamata doeOnly.iterator().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top