java - 根据名称和来源将列出的对象分组为java中的键
问题描述
如何根据列表项的组合对列表元素进行分组。我已从 csv 读取测试数据并将其存储在 i 列表中。
String file = test.csv;
List<String[]> content = new ArrayList<String[]>();
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line = "";
while ((line = br.readLine()) != null) {
content.add(line.split(","));
}
现在列表包含数据,如何根据名称和来源对项目进行分组并存储在列表中。
解决方案
您可以使用新的 IO 类Path
并将Files
输入文件作为字符串流读取,然后将 Stream API 与Collectors.groupingBy
and一起使用Collectors.mapping
以获取如下映射Map<List<String>, List<String>>
:
Map<List<String>, List<String>> map = Files.lines(Path.of(csvFileName)) // get stream of lines from the input CSV file
.map(s -> s.split(",")) // split a line into columns
.collect(Collectors.groupingBy(
// a key is a list of `name` and `source` columns
arr -> Arrays.asList(arr[0], arr[2]),
// a value is a list of field names in column #1
Collectors.mapping(arr -> arr[1], Collectors.toList())
));
System.out.println(map);
示例输出:
{[John Lennon, wiki]=[name, birthDate], [Paul McCartney, wiki]=[name, birthDate, birthPlace]}
推荐阅读
- html - 如何让我的包装类在 jumbotron 响应式?我是新手
- android - 特定应用的音乐设置,如何做到这一点?
- python - 如何让 Python 程序从终端连续运行(直到我手动停止它)?
- python - 如何在python中将一列分成多列?
- java - 如何在 eclipse kepler (Sts 3.4) 中添加 JBOSS EAP 7.2 服务器,因为 7.2 没有可用的适配器服务
- python - 如何对另一个查询集/查询进行 INNER JOIN
- java - 在java中记录的异常
- c# - 如何使用 HEX 值更改白色精灵的颜色?
- python - Django:在这种情况下,我该如何迁移?迁移不起作用
- ruby-on-rails - 如何使用基于当前值的值更新 rails 表列