2016-05-11 5 views
5

Ich habe ein Dateiformat für potentiell große Dateien, wo die erste Zeile speziell ist. Ich möchte die Datei einmal öffnen und sie als einen Strom von Linien behandeln, aber behandeln Sie die erste Zeile anders als alle anderen Zeilen. Die anderen bekommen map/collected, die erste Zeile muss nur in einige Flags geparst werden. Gibt es einen Weg?Ein Java 8 Stream, der alle außer dem ersten Element abbildet und sammelt.

Das beginnt:

result = Files.lines(path).map(something).collect(Collectors.toList()); 

außer, dass ich die erste Zeile umgeleitet werden sollen.

+1

http://stackoverflow.com/a/34640360/2711488 – Holger

Antwort

9

Wenn Sie die Datei nur einmal öffnen müssen, die einfachste Sache zu tun ist, um ein BufferedReader zu machen, bekommt die erste Zeile und dann den Rest streamen:

BufferedReader reader = Files.newBufferedReader(path); 

String firstLine = reader.readLine(); 

result = reader.lines() 
    .map(something) 
    .collect(toList()); 
+2

Beachten Sie, dass im Gegensatz zu 'Files.lines()' der von 'BufferedReader.lines()' zurückgegebene 'Stream' die Datei nicht schließt, wenn 'close()' im 'Stream' aufgerufen wird. –

+3

@HankD Richtig, "Leser" sollte in Try-with-Resources-Block eingerichtet werden. – Misha

+0

Danke; diese ziemlich schöne Idee ist mir entgangen. – bmargulies