[
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)