呈现的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()

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top