Я читаю большой файл как таковой:
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.
Вы можете использовать настраиваемую реализацию Consumer, которая отслеживает индекс с использованием переменной счетчика:
stream.skip(1).forEach(new Consumer<String>(){
private final long counter = 0L;
@Override
public void accept(String line){
parseLine(line, counter++);
}
});