Анализ файла CSV для уникальной строки с использованием нового API-интерфейса Java 8 Streams

Я пытаюсь использовать новый API-интерфейс Java 8 Streams (для которого я являюсь новичком) для анализа определенной строки (с «Недой» в столбце имени) в файле CSV. Используя следующеестатья для мотивации я изменил и исправил некоторые ошибки, чтобы можно было проанализировать файл, содержащий 3 столбца - «имя», «возраст» и «высота».

name,age,height
Marianne,12,61
Julie,13,73
Neda,14,66
Julia,15,62
Maryam,18,70

Код синтаксического анализа выглядит следующим образом:

@Override
public void init() throws Exception {
    Map<String, String> params = getParameters().getNamed();
    if (params.containsKey("csvfile")) {
        Path path = Paths.get(params.get("csvfile"));
        if (Files.exists(path)){
            // use the new java 8 streams api to read the CSV column headings
            Stream<String> lines = Files.lines(path);
            List<String> columns = lines
                .findFirst()
                .map((line) -> Arrays.asList(line.split(",")))
                .get();
            columns.forEach((l)->System.out.println(l));
            // find the relevant sections from the CSV file
            // we are only interested in the row with Neda's name
            int nameIndex = columns.indexOf("name");
            int ageIndex columns.indexOf("age");
            int heightIndex = columns.indexOf("height");
            // we need to know the index positions of the 
            // have to re-read the csv file to extract the values
            lines = Files.lines(path);
            List<List<String>> values = lines
                .skip(1)
                .map((line) -> Arrays.asList(line.split(",")))
                .collect(Collectors.toList());
            values.forEach((l)->System.out.println(l));
        }
    }        
}

Есть ли способ избежать повторного чтения файла после извлечения строки заголовка? Хотя это очень маленький пример файла, я буду применять эту логику к большому файлу CSV.

Есть ли способ использовать API потоков для создания карты между извлеченными именами столбцов (при первом сканировании файла) и значениями в оставшихся строках?

Как я могу вернуть только одну строку в видеList<String> (вместоList<List<String>> содержащий все строки). Я бы предпочел просто найти строку как отображение между именами столбцов и их соответствующими значениями. (немного похоже на набор результатов в JDBC). Я вижу функцию Collectors.mapMerger, которая может быть полезна здесь, но я не знаю, как ее использовать.

Ответы на вопрос(3)

Ваш ответ на вопрос