大多数迭代器和Iterables方法是懒惰!这是什么意思
-
23-09-2019 - |
题
呈现的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);
解决方案
这意味着数据作为你要求它过滤 - 它不经过您的清单,立即并建立过滤后的数据的一个新的列表。相反,当你(在增强的for循环例如自动)调用iterator.next()
迭代器会询问下一个数据项的上游数据源(您的收藏)。然后,它会尝试匹配这对过滤器。如果它匹配它,它就会返回该项目。否则,它会要求从收集另一个项目,保持下去,直到它要么运行项目出来或找到一个匹配。
然后,当你的下一步的要求提供下一个项目时,它会继续从停止的地方去。
在换句话说,它并不仅仅意味着“滤波只发生在第一次调用doeOnly.next()
” - 这意味着“滤波发生在每个调用iterator.next()
”,其中iterator
是呼叫的结果doeOnly.iterator()
。
不隶属于 StackOverflow