我一直在玩Java 8 lambda表达式一个月,我对它能做的一切感到非常满意。我特别喜欢流的抽象,以更有效地使用更少的代码迭代元素集合。
现在我想弄清楚的一件事是将文本文件或记录的SQL查询抽象为某种类型的流,同时仍然允许它被缓冲。我已经尝试过实现Stream接口,并被抽象方法所淹没。
我会将我的工作粘贴到正在进行中,但到目前为止,这一切都已经失败了,我的研究结果也是零。有人可以展示如何使用BufferedReader将CSV转换为每行的流吗?在保持缓冲性质的同时?我也希望它也支持并行。这样,对于每个缓冲的记录,它可以并行传递给一系列高阶函数。
答案 0 :(得分:1)
虽然所有流都至少在某种程度上支持parallel()
。
答案 1 :(得分:1)
将BufferedReader转换为每行的流很容易,只需使用专门为此目的制作的方法BufferedReader.lines()
。当然,您只需使用Files.lines
,完全跳过BufferedReader
部分,unless you need a specially configured CharSetDecoder
。
然后,您可以使用map
或flatMap
将行流转换为记录流或单个单元格。
通常,手动实现整个Stream
接口并不是一个好主意。创建自定义Stream
的常用方法是实施Spliterator
并使用StreamSupport.stream
方法创建Stream
。