【发布时间】:2019-06-16 04:07:42
【问题描述】:
我正在尝试研究如何在 Java 8 Stream 上实现自定义中间操作。看来我被锁定了:(
具体来说,我想获取一个流并将每个条目返回到并包括第一个具有特定值的条目。我想在那之后停止产生任何东西——让它短路。
它正在对输入数据进行一系列验证检查。我想在第一个错误上停下来,如果有的话,但我想在途中整理警告。而且因为这些验证检查可能很昂贵 - 例如涉及数据库查找 - 我只想运行所需的最小集合。
所以代码应该是这样的:
Optional<ValidationResult> result = validators.stream()
.map(validator -> validator.validate(data))
.takeUntil(result -> result.isError()) // This is the bit I can't do
.reduce(new ValidationResult(), ::mergeResults);
似乎我应该能够用 ReferencePipeline.StatefulOp 做点什么,除了它都是包范围,所以我不能扩展它。所以我想知道实现这一目标的正确方法是什么?或者是否有可能?
还要注意 - 这需要在 Java 8 中,而不是 9+,因为由于各种不相关的原因我们还没有。
干杯
【问题讨论】:
-
在 Java-9 中寻找
takeWhile? -
也许this 的答案会帮助您在Java 8 中创建自己的
takeWhile()。 -
ValidationResult中的值是什么?是否可以忽略它的字段而只关心isError以及剩下哪些验证器?如果是这样,请检查我的答案... -
stackoverflow.com/questions/32290278/… 这似乎是您想要实现的目标。
-
@Naman
takeWhile无法工作,因为问题的包括部分
标签: java java-stream