Iterables.filter(Iterable, Predicate)
とCollections2.filter(Collection, Predicate)
の方法に違いがある場合は、Guavaで知りたいことがありますか?Guava:Iterables.filter VS Collections2.filter、大きな違いはありますか?
これらは、繰り返しの順序を維持し、ライブビューを提供するように見えます。 Javadocは、Collections2.filter().size()
を呼び出すと、すべての要素を反復処理します。
私は、項目のリストをフィルタリングする述語があり、その結果、ビュー内に残っている項目の数(またはリストは関係ありません)が必要であるとします。私は何を使用するのですか? size()
メソッドがCollection
によって提供されるので、Collections2.filter
を使用する方が簡単です。
しかし、バックグラウンドで、違いがあります:
ImmutableList.copyOf(
Iterables.filter(lead.getActions(), isRealActionDoneByUserPredicate)
).size();
そして:ところで
Collections2.filter(lead.getActions(),isRealActionDoneByUserPredicate).size();
は、通常のArrayList
を構築するよりも速くImmutableList
を構築していますか?
明らかに明白なことを述べておきましょう.1つは 'Iterable'、もう1つは' Collection'です。下の 'Collections2.filter'は' FilteredCollection'を使用します[link](https://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/collect/Collections2.java# 133)、多くのものを 'Iterables' /' Iterators'に委譲しているので、機能上の違いはありません。例えば、 'FilteredCollection#size()'は@Louis Wassermanの答えにあるとおり、正確に 'Iterators.size(Iterators.filter(unfiltered.iterator()、predicate))'です。 –