csvparser-提取csv的行索引

cwtwac6a  于 2021-07-12  发布在  Java
关注(0)|答案(0)|浏览(145)

我正在创造一个 Map 通过按csv文件中的第一列对记录进行分组。我有一些代码,所以。。。

Map<String, List<CSVRecord>> recs = StreamSupport.stream(parser.spliterator(), false)
    .collect(groupingBy(r -> r.get(0)));

哪里 parser 是一个 CSVParser 定义如下:

CSVParser.parse(newBufferedReader(path), CSVFormat.DEFAULT.withFirstRecordAsHeader());

这种方法可以工作,但会占用gc上的大量空间,因为我持有Map中每个记录对象的列表。而不是保存列表 List<CSVRecord> 在Map中,我想知道是否有办法只保存Map中每条记录的索引。这会节省我很多空间。
例如,假设我的csv文件是这样的(真实的文件比这个例子有更多的列)。。。

ID      Name       Title
|       |           | 
111     Bob        Engineer 
111     Jeremy     Janitor
222     Mary       Teacher
...

而不是像这样创建Map。。。

{
   '111': [CSVRecord('111', 'Bob', 'Engineer'), CSVRecord('111', 'Jeremy', 'Janitor')],
   '222': [CSVRecord('222', 'Mary', 'Teacher')],
   ...
}

我想要以下。。。

{
    '111': [0,1],
    '222': [2],
    ...
}

这样我就可以根据需要按索引加载行。但是,我不确定是否有一种方法可以使用 CSVParser ,似乎我需要将整个csv作为对象加载到内存中,这并不理想。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题