[ https://issues.apache.org/jira/browse/CSV-274?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17504592#comment-17504592 ]
Gary D. Gregory commented on CSV-274: ------------------------------------- Hi [~dguiney4] As you can read in the Javadoc for {{{}CSVParser.getRecords(){}}}: {quote}Parses the CSV input according to the given format and returns the content as a list of CSVRecord CSVRecords. {quote} Obviously, the only way to do that is to read the whole input. If you look at 1.9.0-SNAPSHOT ([https://repository.apache.org/content/repositories/snapshots]) or git master, you'll find: {code:java} /** * Returns a sequential {@code Stream} with this collection as its source. * * @return a sequential {@code Stream} with this collection as its source. * @since 1.9.0 */ public Stream<CSVRecord> stream() { return StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator(), Spliterator.ORDERED), false); } {code} Which works and is tested in {{{}CSVParserTest.testStream(){}}}. > CSVParser.iterator() does not iterate over result set as expected. > ------------------------------------------------------------------ > > Key: CSV-274 > URL: https://issues.apache.org/jira/browse/CSV-274 > Project: Commons CSV > Issue Type: Bug > Components: Parser > Affects Versions: 1.8 > Reporter: David Guiney > Priority: Major > > To return a stream of `CSVRecords` in a Spliterators, I need to call > `CSVParser.getRecords().iterator()`. I worry that the `getRecords()` will > load the records from the parser into memory, before creating the iterator > which can be a problem with large CSV files. > My code: > {code:java} > public Stream<CSVRecord> convertFileToMaps(Path path) throws IOException { > try (CSVParser parser = CSVParser.parse(path, > Charset.defaultCharset(), CSVFormat.RFC4180 > .withFirstRecordAsHeader())) { > return > StreamSupport.stream(Spliterators.spliteratorUnknownSize(parser.iterator(), > 0), false); > } > } > {code} > and: > {code:java} > public Stream<CSVRecord> convertFileToMaps(Path path) throws IOException { > try (CSVParser parser = CSVParser.parse(path, > Charset.defaultCharset(), CSVFormat.RFC4180 > .withFirstRecordAsHeader())) { > return StreamSupport.stream(parser.spliterator(), false); > } > } > {code} > When I collect the results of my method, it gives me > {code:java} > [] > {code} > > If I replace `parser.iterator()` with `parser.getRecords().iterator()` then I > get the desired results. Is the iterator not meant to be an iterator of the > list of `CSVRecord`. -- This message was sent by Atlassian Jira (v8.20.1#820001)