Java 使用流读取文件并跟踪当前索引
我正在阅读这样一个大文件:Java 使用流读取文件并跟踪当前索引,java,android,lambda,java-8,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(); } 我还想做的是跟踪我正在阅读的当前行,让parseLine看起来像这样: private static void parseLine(
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
stream.skip(1).forEach(Main::parseLine);
} catch (IOException e) {
e.printStackTrace();
}
我还想做的是跟踪我正在阅读的当前行,让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));
List result=stream.skip(1).collect(Collectors.toList());
IntStream.range(0,result.size())
.forEach(i->parseLine(result.get(i),i));
另一种选择是使用API。您可以使用自定义使用者实现,它通过使用计数器变量跟踪索引:
stream.skip(1).forEach(new Consumer<String>(){
private final long counter = 0L;
@Override
public void accept(String line){
parseLine(line, counter++);
}
});
stream.skip(1).forEach(新消费者(){
专用最终长计数器=0L;
@凌驾
公共无效接受(字符串行){
parseLine(line,counter++);
}
});
stream.skip(1).forEach(new Consumer<String>(){
private final long counter = 0L;
@Override
public void accept(String line){
parseLine(line, counter++);
}
});