Guava Iterables.filter(),你如何测试空回报?

fis*_*rds 0 java guava

我喜欢使用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没有非迭代解决方案,那么迭代并计算++会更好吗?

Lou*_*man 7

FluentIterable.from(foo).filter(predicate).isEmpty() 不会迭代任何超过它.

但是如果你需要大小,那么你真的想要使用它FluentIterable.from(foo).filter(predicate).size(),它不会存储元素,但只会计算与谓词匹配的元素.

  • 但是因为如果它不是空的他想要大小,你真的只想要开始大小而不是调用`isEmpty`. (2认同)