如果我用依赖于输入的谓词限制它,我可以计算我的流大小吗?

dbm*_*ngo 5 java functional-programming java-8 java-stream

我想用随机数制作一个流.一旦数字满满一定条件,我想现在需要多少次迭代.所以要么我想要流的大小,要么我可以从中读取大小的集合.

以下是我的方法:

random.ints(0, Integer.MAX_VALUE).anyMatch(a -> {return a < 20000;});

一旦我的条件满了,这只给我一个布尔值.

random.ints(0, Integer.MAX_VALUE).filter(a -> a < 20000).limit(1).count();

这显然会返回1.但我希望在过滤结果之前有大小.我用计数变量进一步尝试了几个东西但是因为lambdas从外面有效地捕获它们,所以我有一个初始化问题.

任何帮助或提示表示赞赏

Era*_*ran 3

Java 9 有一个功能来支持这一点 - takeWhile

random.ints(0, Integer.MAX_VALUE).takeWhile(a -> a < 20000).count();
Run Code Online (Sandbox Code Playgroud)

  • @Eugene,这就是 `count` 所给出的(与 `takeWhile` 结合使用时)。 (2认同)
  • @Eran count 这里的值与流产生的元素数量相同,我的理解是OP想要这样的东西:获取高于10的元素并将其限制为100 - 从流中生成多少个元素(`生成` 生产地)为了实现这一点 (2认同)