Чтение файла с помощью Stream и отслеживание текущего индекса - PullRequest
0 голосов
/ 10 июня 2018

Я читаю большой файл как таковой:

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 голосов
/ 10 июня 2018

Вы можете использовать пользовательскую реализацию Consumer, которая отслеживает индекс с помощью переменной счетчика:

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

    @Override
    public void accept(String line){
        parseLine(line, counter++);
    }
});
0 голосов
/ 10 июня 2018

Соберите строки в список, затем используйте 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...