编程语言
首页 > 编程语言> > Java 8流-增量收集/部分缩减/间断映射/ …这甚至叫什么?

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