Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多个collectItems如何提前终止并返回已收集的项目_Java_Streaming_Quarkus_Mutiny - Fatal编程技术网

Java 多个collectItems如何提前终止并返回已收集的项目

Java 多个collectItems如何提前终止并返回已收集的项目,java,streaming,quarkus,mutiny,Java,Streaming,Quarkus,Mutiny,在我的quarkus服务中,我正在构建一个Multi。流可能是无限的,我想知道当积累了足够的数据时,如何提前终止并收集结果 以下是我的原型: Multi<Data> sortedStream = getStream(); return this.sortedStream.collectItems().in( LinkedList::new, new BiConsumer<LinkedList<Coverage>, Data>() {

在我的quarkus服务中,我正在构建一个
Multi
。流可能是无限的,我想知道当积累了足够的数据时,如何提前终止并收集结果

以下是我的原型:

Multi<Data> sortedStream = getStream();
return this.sortedStream.collectItems().in(
    LinkedList::new,
    new BiConsumer<LinkedList<Coverage>, Data>() {
        @Override
        public void accept(LinkedList<Coverage> coverages, Data incoming) {
        if (coverages.isEmpty()) {
            coverages.add(new Coverage(incoming));
            return;
        }

        if (enough(coverages)) {
            // Question: How to early terminate and collect coverage downstream?
        }

        Coverage last = coverages.getLast();
        if (worthAdd(last, incoming)) {
            coverages.add(new Coverage(incoming));
        } else {
            return;
        }

        }
    }
)
Multi-sortedStream=getStream();
在中返回此.sortedStream.collectItems()(
LinkedList::新建,
新双消费者(){
@凌驾
public void accept(LinkedList覆盖范围、传入数据){
if(coverage.isEmpty()){
保险范围。添加(新保险范围(传入));
返回;
}
如果(足够(保险范围)){
//问题:如何提前终止并收集下游保险?
}
Coverage last=Coverage.getLast();
if(worthAdd(最后一个,传入)){
保险范围。添加(新保险范围(传入));
}否则{
返回;
}
}
}
)

根据官方团队()的说法,
收集
收集所有物品,直到最终事件发生。
我设法调整了我的算法,找到了一种方法,可以使用
multi.select().first
API检查上游和提前终止每个项目。

我注意到链接上说不要从无限流中收集项目,否则可能会导致内存不足故障!因此,如果你将河流限制在上游,使其最终停止,你就不能返回吗;当你有足够的保险时??(即跳过在该点创建和评估新的覆盖率???)在我的情况下,内存不是问题,因为在添加到结果之前会检查项目。我很有信心这个列表不会超过几百个项目。难道你不能像你现在做的那样做上游工作吗?遵循这个模式
upstream.select()。其中(f).collect()。在(f)
中,f是实现
BiConsumer
函数的东西[但是是有状态的-在你有足够的覆盖率之后,你要确保函数会删除更多的元素…]如果你只有几百项,不要担心过滤掉任何东西,只要在你有足够的覆盖率时返回即可(它会被调用,但会很快完成)。上述列表是最终结果。我可能仍然需要检查流中的更多项目。此外,是否终止取决于列表的内容,而不是项目。我希望终止,而不是删除数据。我正在寻找一种更优雅的方法来处理
Multi
中的此类问题。