Me gustaría saber en Guava si hay alguna diferencia entre los métodos Iterables.filter(Iterable, Predicate)
y Collections2.filter(Collection, Predicate)
?Guava: Iterables.filter VS Collections2.filter, ¿alguna gran diferencia?
Parece que ambos mantienen el orden de iteración y proporcionan una vista en vivo. Javadoc dice que al llamar al Collections2.filter().size()
se iterará sobre todos los elementos.
Supongamos que tengo un predicado para filtrar una lista de elementos, y como resultado quiero el número de elementos que quedan en la vista (o la lista, no importa). ¿Qué se supone que debo usar? Parece más simple usar Collections2.filter
ya que el método size()
es proporcionado por Collection
s.
Pero en el fondo, hay una diferencia entre:
ImmutableList.copyOf(
Iterables.filter(lead.getActions(), isRealActionDoneByUserPredicate)
).size();
Y:
Collections2.filter(lead.getActions(),isRealActionDoneByUserPredicate).size();
Por cierto, está construyendo una ImmutableList
más rápido que la construcción de una normal de ArrayList
?
Simplemente indicando lo obvio: uno te da 'Iterable' y el otro te da' Collection'. Debajo de 'Collections2.filter' utiliza' FilteredCollection' [link] (https://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/collect/Collections2.java# 133) que delega muchas cosas a 'Iterables' /' Iterators' por lo que no debería haber diferencias funcionales. Por ejemplo, 'FilteredCollection # size()' es exactamente 'Iterators.size (Iterators.filter (unfiltered.iterator(), predicate))' como lo indica la respuesta de @Louis Wasserman. –