我正在处理遵循以下模式的潜在无限数据元素流:
E1 <start mark>
E2 foo
E3 bah
...
En-1 bar
En <end mark>
也就是说,<String> 流必须先累积在缓冲区中,然后才能将它们映射到对象模型。
目标:将 a 聚合Stream<String>为 a,Stream<ObjectDefinedByStrings> 而无需收集无限流的开销。
用英语来说,代码类似于“一旦看到开始标记,就开始缓冲。缓冲直到看到结束标记,然后准备返回旧缓冲区,并准备一个新缓冲区。返回旧缓冲区。”
我当前的实现形式如下:
Data<String>.stream()
.map(functionReturningAnOptionalPresentOnlyIfObjectIsComplete)
.filter(Optional::isPresent)
Run Code Online (Sandbox Code Playgroud)
我有几个问题:
这个操作正确的名称是什么?(即我可以通过 Google 搜索更多示例吗?我发现的每个讨论都.map()涉及 1:1 映射。每个关于 .reduce 的讨论)都涉及 n:1 缩减。每次讨论都.collect()讨论将累积作为终端操作......)
从很多方面来看,这似乎都很糟糕。有更好的方法来实现这个吗?(候选人的形式.collectUntilConditionThenApplyFinisher(Collector,Condition,Finisher)......?)
谢谢!