First, the Java 8 stream is used, and then forEach (…) is called.
•
Java
I have a CSV file, the first line contains the title So I think using java 8 stream is perfect
try (Stream<String> stream = Files.lines(csv_file) ){ stream.skip(1).forEach( line -> handleLine(line) ); } catch ( IOException ioe ){ handleError(ioe); }
Can you get the first element, analyze it, and then call the forEach method? It's like
stream .forFirst( line -> handleFirst(line) ) .skip(1) .forEach( line -> handleLine(line) );
In addition: my CSV file contains about 1K lines. I can process each line in parallel to speed up Except the first line I need the first line to initialize other objects in the project: / is it fast to open BufferedReader, read the first line, close BufferedReader and use parallel flow?
Solution
Typically, you can use iterators to do this:
Stream<Item> stream = ... //initialize your stream Iterator<Item> i = stream.iterator(); handleFirst(i.next()); i.forEachRemaining(item -> handleRest(item));
In your program, it looks like this:
try (Stream<String> stream = Files.lines(csv_file)){ Iterator<String> i = stream.iterator(); handleFirst(i.next()); i.forEachRemaining(s -> handleRest(s)); }
You may want to add some error checking in case you get 1 or 0 rows, but this should work
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码