Большинство Итераторов и методов Iterable ЛЕНИВЫ! Что это означает

1 из представления говорит, что "Эти методы ЛЕНИВЫ!"

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

Может кто-то помогать мне понять то, что они подразумевают под этим, позволяет, говорят, что у меня есть набор Persons и я применяю фильтр для возврата только людей, фамилия которых является DOE.

Это означает, что "фильтрация происходит только на первом вызове к doeOnly.next ()?"

List<Person> persons= ....
Iterable doeOnly= Iterables.filter(persons,DOE_AS_LAST_NAME_PREDICATE);
15
задан Kevin Bourrillion 29 January 2010 в 19:33
поделиться

1 ответ

Это означает, что данные фильтруются по запросу - это не проходит через ваш список немедленно и создать новый список отфильтрованных данных. Вместо этого, когда вы звоните ITERATOR.Next () (например, автоматически в расширенном цикле), итератор будет задать свой upstream источник данных (ваша коллекция) для следующего элемента данных. Затем он попытается сопоставить это против фильтра. Если это соответствует этому, это вернет этот товар. В противном случае он попросит еще один элемент из коллекции, подходящего до тех пор, пока он не закончится или не находит совпадение.

Тогда, когда вы Далее Спросите следующий элемент, он продолжит идти от того места, где он остановился.

Другими словами, это не просто означает «фильтрация происходит только при первом вызове Doeonly.Next () » - это означает, что «Фильтрация происходит на каждый ITERATOR.NEXT () «Где итератор является результатом вызова DOOUONLY.ITRATOR () .

29
ответ дан 1 December 2019 в 02:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: