我喜欢使用Guava的Iterables过滤器.但是一个常见的代码片段如下所示:
List foo = Lists.newArrayList(Iterables.filter(someCollection, somePredicate));
if (foo.isEmpty) {
// do empty
} else {
int count = foo.size(); // do non-empty
}
Run Code Online (Sandbox Code Playgroud)
这是浪费,因为我真的不需要构建"foo"列表,我只需要知道它是否为空,并获得元素数量的计数.
我想知道以下的最佳实践:
1)如何在isEmpty()不浪费时间的情况下将列表构建到内存中进行测试
2)有没有办法在不迭代所有条目的情况下获取大小?
3)如果#2没有非迭代解决方案,那么迭代并计算++会更好吗?
FluentIterable.from(foo).filter(predicate).isEmpty() 不会迭代任何超过它.
但是如果你需要大小,那么你真的想要使用它FluentIterable.from(foo).filter(predicate).size(),它不会存储元素,但只会计算与谓词匹配的元素.
| 归档时间: |
|
| 查看次数: |
1463 次 |
| 最近记录: |