我正在读取这样一个大文件:

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);
}

我怎样才能做到这一点?

最佳答案

将行收集到列表中,然后使用IntStream.range或显式的for循环调用将元素与索引一起传递的方法:

List<String> result = stream.skip(1).collect(Collectors.toList());
IntStream.range(0, result.size())
         .forEach(i -> parseLine(result.get(i), i));

另一种选择是使用LineNumberReader API。

10-06 10:51