Java 8流-增量收集/部分缩减/间断映射/ …这甚至叫什么?
作者:互联网
我正在处理遵循该模式的可能无限的数据元素流:
E1<开始标记>
E2富
E3 bah
…
En-1巴
En<结束标记>
也就是说,< String>的流必须在缓冲器中累积,然后才能将它们映射到对象模型.
目标:聚合Stream< String>进入Stream< ObjectDefinedByStrings>.没有在无限流上收集的开销.
用英语来说,代码将类似于“一旦看到开始标记,就开始缓冲.直到看到结束标记,才开始缓冲,然后准备返回旧缓冲区,并准备一个新缓冲区.返回旧缓冲区.”
我当前的实现形式为:
Data<String>.stream()
.map(functionReturningAnOptionalPresentOnlyIfObjectIsComplete)
.filter(Optional::isPresent)
我有几个问题:
>该操作的正确名称是什么? (即,我可以在Google上找到更多示例吗?我对.map()的每一次讨论都谈论1:1映射.对.reduce的每一次讨论都谈论n:1约简.每次对.collect()的讨论都谈到将累积作为终端操作…)
>这在许多方面似乎很糟糕.有没有更好的方法来实现这一点? (格式为.collectUntilConditionThenApplyFinisher(Collector,Condition,Finisher)…的候选人)
谢谢!
解决方法:
为了避免产生麻烦,您可以在映射之前进行过滤.
Data<String>.stream()
.filter(text -> canBeConvertedToObject(text))
.map(text -> convertToObject(text))
这在无限流上效果很好,并且仅构造需要构造的对象.它还避免了创建不必要的Optional对象的开销.
标签:java-8,java-stream,dictionary,reduce,java 来源: https://codeday.me/bug/20191121/2048243.html