首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >芭乐: Iterables.frequency(Iterable<T>,Predicate<T>)

芭乐: Iterables.frequency(Iterable<T>,Predicate<T>)
EN

Stack Overflow用户
提问于 2010-12-08 21:14:11
回答 3查看 4.7K关注 0票数 12

真的没有方法来确定在Iterable中满足谓词的元素的数量吗?我这样做是对的吗:

代码语言:javascript
复制
return Lists.newArrayList(Iterables.filter(iterable, predicate)).size()

如果有,没有方法的原因是什么?

代码语言:javascript
复制
Iterable.frequency(Iterable<T>, Predicate<T>)

干杯

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-08 21:28:51

这可能会更简单:

代码语言:javascript
复制
return Iterables.size(Iterables.filter(iterable, predicate));

它避免了所有数组内存的分配。

票数 24
EN

Stack Overflow用户

发布于 2010-12-12 15:38:44

当iterable是一个集合时,你可以这样说

代码语言:javascript
复制
return Collections2.filter(collection, predicate).size();

对Iterable.frequency(可迭代,谓词)方法的需求并不多。

票数 4
EN

Stack Overflow用户

发布于 2010-12-08 21:29:41

此筛选器方法不创建集合。它用一个新的迭代器创建一个新的Iterable,过滤是on demand完成的,就像你实际迭代Iterable一样。

所以,是的,guava框架可以有一个frequency(Iterable, Predicate)方法,但是这个方法必须在内部创建迭代器,才能获得迭代步骤的数量。然后把它扔掉。如果您的迭代器在动态集合(如数据库表)上工作,那么频率"size“和过滤器"size”甚至可能不同。

如果两者都需要(迭代器和大小),则获取可迭代对象,将其放入合适的集合中(冻结),并使用集合size()方法。这保证了基于过滤的Iterable的(冻结的)集合的真实大小值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4387820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档