イテレータと反復可能オブジェクトのメソッドのほとんどはLAZYです!これは何を意味するのでしょうか

StackOverflow https://stackoverflow.com/questions/2155788

質問

プレゼンテーションの1は "これらのメソッドはLAZYです!" と言います。

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