我正在读取这样一个大文件:
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。