Этот метод фильтра не создает коллекцию.Он создает новый Iterable с новым итератором, и фильтрация выполняется on demand
, как если бы вы фактически выполняли итерацию по Iterable.
Так что да, инфраструктура guava может иметь метод frequency(Iterable, Predicate)
, но этот метод должен был бы создать итератор внутри, чтобы получить количество шагов итерации.И выбросить потом.И если ваш итератор работает с динамическими коллекциями (например, таблицами базы данных), частота «размер» и фильтр «размер» могут даже отличаться.
Если вам нужны оба (итератор и размер), возьмите итерируемое, загрузите его в подходящую коллекцию (заморозьте) и используйте метод collection size()
.Это гарантирует истинное значение размера для (замороженной) коллекции на основе отфильтрованного Iterable.