Analizando un archivo CSV para una fila única usando la nueva API de Java 8 Streams

Estoy tratando de usar la nueva API de Java 8 Streams (para la cual soy un novato completo) para analizar una fila en particular (la que tiene 'Neda' en la columna de nombre) en un archivo CSV. Usando lo siguienteartículo por motivos de motivación, modifiqué y arreglé algunos errores para poder analizar el archivo que contiene 3 columnas: 'nombre', 'edad' y 'altura'.

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

El código de análisis es el siguiente:

@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));
        }
    }        
}

¿Hay alguna forma de evitar volver a leer el archivo después de la extracción de la línea de encabezado? Aunque este es un archivo de ejemplo muy pequeño, aplicaré esta lógica a un archivo CSV grande.

¿Existe alguna técnica para usar la API de secuencias para crear un mapa entre los nombres de columna extraídos (en la primera exploración del archivo) con los valores en las filas restantes?

¿Cómo puedo devolver solo una fila en forma deList<String> (en lugar deList<List<String>> que contiene todas las filas). Preferiría encontrar la fila como una asignación entre los nombres de columna y sus valores correspondientes. (un poco como un conjunto de resultados en JDBC). Veo una función Collectors.mapMerger que podría ser útil aquí, pero no tengo idea de cómo usarla.

Respuestas a la pregunta(3)

Su respuesta a la pregunta