是否有Java 8流操作限制(可能是无限的)Stream直到第一个元素无法匹配谓词?
在Java 9中,我们可以使用takeWhile下面的示例来打印小于10的所有数字.
IntStream
.iterate(1, n -> n + 1)
.takeWhile(n -> n < 10)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
由于Java 8中没有这样的操作,以一般方式实现它的最佳方法是什么?
假设我有一个布尔值流,我正在编写的reduce操作是||(OR).我能否以一种方式编写它,以便在true遇到值时至少放弃对某些元素的评估?
我正在寻找一些优化(可能是它是一个并行流),不一定是完全优化,虽然后者会很棒.
在做一个项目时,我写了这一行,基本上它决定了是否根据有多少孩子合并当前节点.
int succNodes = Arrays.stream(children).mapToInt(PRQuadNode::count).sum();
if (succNodes <= bucketingParam) { /* do something */ }
Run Code Online (Sandbox Code Playgroud)
问题是succNodes通常会明显大于bucketingParam.如果我已经找到了足够大的金额,那就没有必要继续计算了.如果我知道我将失败检查succNodes <= bucketingParam,那么启用流提前停止的最佳方法是什么?
注意:在这种情况下,孩子的总是4.
注2:PRQuadNode :: count是一个递归方法,它不是尾递归的.