使用Stream读取文件并跟踪当前索引

时间:2018-06-10 08:37:48

标签: java android lambda java-8

我正在阅读一个大文件:

try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
    stream.skip(1).forEach(Main::parseLine);
} catch (IOException e) {
    e.printStackTrace();
}

其中解析行如下所示:

private static void parseLine(String line) {
    System.out.println(line);
}

我想要做的是跟踪我正在阅读的当前行,并parseLine看起来像这样:

private static void parseLine(String line, int idx) {
    System.out.println(line);
}

我该怎么做?

2 个答案:

答案 0 :(得分:3)

将行收集到列表中,然后使用String address = s.nextLine(); address = s.nextLine(); 或显式IntStream.range循环调用您的方法将元素与索引一起传递:

for

另一种选择是使用LineNumberReader API。

答案 1 :(得分:2)

您可以使用自定义Consumer实现,它使用计数器变量跟踪索引:

stream.skip(1).forEach(new Consumer<String>(){
    private final long counter = 0L;

    @Override
    public void accept(String line){
        parseLine(line, counter++);
    }
});