我正在创造一个 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作为对象加载到内存中,这并不理想。
暂无答案!
目前还没有任何答案,快来回答吧!