【发布时间】:2016-06-29 15:55:23
【问题描述】:
我创建了一个解析库,它接受提供的输入并返回记录流。然后一个程序调用这个库并处理结果。就我而言,我的程序正在使用类似
recordStream.forEach(r -> insertIntoDB(r));
可以提供给解析库的输入类型之一是平面文件,它可能有一个标题行。因此,解析库可以配置为跳过标题行。如果配置了标题行,它会在返回中添加一个 skip(n) 元素,例如
Files.lines(input)**.skip(1)**.parallel().map(r -> createRecord(r));
解析库返回结果流。
但是,skip、parallel 和 forEach 似乎不能很好地结合在一起,最终程序员必须改为调用 forEachOrdered,但是把这个要求放在程序员身上是很糟糕的设计,期望他们知道在处理时必须使用 forEachOrdered带有标题行的文件的输入类型。
我如何在必要时在返回的流链的构造中自己执行有序要求,以将功能齐全的流返回给程序编写者,而不是具有隐藏限制的流?将流包装在另一个流中的答案是什么?
【问题讨论】:
-
最简单的解决方案是要求 JRE 是最新的,即
1.8u60或更新版本...
标签: java design-patterns java-stream encapsulation