Java lambda,将记录(例如CSV)的文本文件转换为流?

时间:2014-11-26 22:03:02

标签: java java-8 java-stream

我一直在玩Java 8 lambda表达式一个月,我对它能做的一切感到非常满意。我特别喜欢流的抽象,以更有效地使用更少的代码迭代元素集合。

现在我想弄清楚的一件事是将文本文件或记录的SQL查询抽象为某种类型的流,同时仍然允许它被缓冲。我已经尝试过实现Stream接口,并被抽象方法所淹没。

我会将我的工作粘贴到正在进行中,但到目前为止,这一切都已经失败了,我的研究结果也是零。有人可以展示如何使用BufferedReader将CSV转换为每行的流吗?在保持缓冲性质的同时?我也希望它也支持并行。这样,对于每个缓冲的记录,它可以并行传递给一系列高阶函数。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

将BufferedReader转换为每行的流很容易,只需使用专门为此目的制作的方法BufferedReader.lines()。当然,您只需使用Files.lines,完全跳过BufferedReader部分,unless you need a specially configured CharSetDecoder

然后,您可以使用mapflatMap将行流转换为记录流或单个单元格。

通常,手动实现整个Stream接口并不是一个好主意。创建自定义Stream的常用方法是实施Spliterator并使用StreamSupport.stream方法创建Stream