真的没有方法来确定在Iterable中满足谓词的元素的数量吗?我这样做是对的吗:
return Lists.newArrayList(Iterables.filter(iterable, predicate)).size()如果有,没有方法的原因是什么?
Iterable.frequency(Iterable<T>, Predicate<T>)干杯
发布于 2010-12-08 21:28:51
这可能会更简单:
return Iterables.size(Iterables.filter(iterable, predicate));它避免了所有数组内存的分配。
发布于 2010-12-12 15:38:44
当iterable是一个集合时,你可以这样说
return Collections2.filter(collection, predicate).size();对Iterable.frequency(可迭代,谓词)方法的需求并不多。
发布于 2010-12-08 21:29:41
此筛选器方法不创建集合。它用一个新的迭代器创建一个新的Iterable,过滤是on demand完成的,就像你实际迭代Iterable一样。
所以,是的,guava框架可以有一个frequency(Iterable, Predicate)方法,但是这个方法必须在内部创建迭代器,才能获得迭代步骤的数量。然后把它扔掉。如果您的迭代器在动态集合(如数据库表)上工作,那么频率"size“和过滤器"size”甚至可能不同。
如果两者都需要(迭代器和大小),则获取可迭代对象,将其放入合适的集合中(冻结),并使用集合size()方法。这保证了基于过滤的Iterable的(冻结的)集合的真实大小值。
https://stackoverflow.com/questions/4387820
复制相似问题