A maioria dos métodos iteradores e iteráveis ​​é preguiçosa! O que isto significa

StackOverflow https://stackoverflow.com/questions/2155788

Pergunta

1 da apresentação diz que "esses métodos são preguiçosos!"

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

Alguém pode me ajudar a entender o que eles querem dizer com isso, digamos que eu tenha uma coleção de Persons e aplico um filtro para devolver apenas as pessoas cujo sobrenome é DOE.

Então, isso significa que "a filtragem acontece apenas na primeira chamada para Doeonly.Next ()?"

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

Solução

Isso significa que os dados são filtrados conforme você solicita - eles não passam pela sua lista imediatamente e criam uma nova lista dos dados filtrados. Em vez disso, quando você liga iterator.next() (por exemplo, automaticamente em um loop aprimorado), o iterador solicitará sua fonte de dados upstream (sua coleção) para o próximo item de dados. Em seguida, tentará combinar isso com o filtro. Se corresponder, retornará esse item. Caso contrário, ele solicitará outro item da coleção, mantendo -se até que ela fique sem itens ou encontre uma correspondência.

Então quando você próximo Peça o próximo item, ele continuará indo de onde ele parou.

Em outras palavras, isso não significa apenas "a filtragem acontece apenas na primeira chamada para doeOnly.next()" - significa" a filtragem acontece em cada ligar para iterator.next()" Onde iterator é o resultado de ligar doeOnly.iterator().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top