首页 > 解决方案 > 根据名称和来源将列出的对象分组为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(","));
  }

现在列表包含数据,如何根据名称和来源对项目进行分组并存储在列表中。

这是我的示例 csv 文件 在此处输入图像描述

标签: javaselenium-webdriver

解决方案


您可以使用新的 IO 类Path并将Files输入文件作为字符串流读取,然后将 Stream API 与Collectors.groupingByand一起使用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]}

推荐阅读