gpt4 book ai didi

java - 大多数 Iterators 和 Iterables 方法都是 LAZY!这是什么意思

转载 作者:太空狗 更新时间:2023-10-29 22:51:21 27 4
gpt4 key购买 nike

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

最佳答案

这意味着数据会根据您的请求进行过滤 - 它不会立即通过您的列表,而是建立一个新的过滤数据列表。相反,当您调用 iterator.next() 时(例如,在增强的 for 循环中自动调用),迭代器将向其上游数据源(您的集合)询问下一个数据项。然后它将尝试将其与过滤器进行匹配。如果匹配,它将返回该项目。否则,它会从集合中请求另一个项目,一直持续到它用完项目或找到匹配项。

然后,当您next 请求下一项时,它会从停止的地方继续。

换句话说,它不仅仅意味着“过滤仅在第一次调用 doeOnly.next() 时发生”——它意味着“过滤发生在每个调用 iterator.next()",其中 iterator 是调用 doeOnly.iterator() 的结果。

关于java - 大多数 Iterators 和 Iterables 方法都是 LAZY!这是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2155788/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com