Ara*_*ram 15 java collections iterator guava
演讲中有一篇说"这些方法很懒散!"
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>)
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我理解他们的意思,让我说我有一个集合,Persons我应用过滤器只返回姓氏为DOE的人.
那么这是否意味着"过滤仅在第一次调用doeOnly.next()时发生?"
List<Person> persons= ....
Iterable doeOnly= Iterables.filter(persons,DOE_AS_LAST_NAME_PREDICATE);
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 29
这意味着数据会在您请求时进行过滤 - 它不会立即通过您的列表,并构建过滤数据的新列表.相反,当您调用iterator.next()(例如,在增强的for循环中自动执行)时,迭代器将向其上游数据源(您的集合)请求下一个数据项.然后它会尝试将此与过滤器匹配.如果它匹配它,它将返回该项目.否则,它将要求收集中的另一个项目,直到它用完项目或找到匹配项.
然后,当你接下来要求下一个项目时,它将继续从它停止的地方开始.
换句话说,它不仅仅意味着"仅在第一次调用doeOnly.next()时发生过滤" - 这意味着" 每次调用时都会发生过滤iterator.next()",这iterator是调用的结果doeOnly.iterator().
| 归档时间: |
|
| 查看次数: |
8644 次 |
| 最近记录: |