我有一个用例,需要读取文件并获取序列的分组以及与该序列关联的值的列表。这些记录在文件中的格式类似于sequence -val,例如

10-A
10-B
11-C
11-A

我希望输出是一个映射(Map<String,List<String>>),以序列作为键,并将与之关联的值列表作为值,如下所示
10,[A,B]
11,[C,A]

有没有一种方法可以在不为这些记录创建POJO的情况下执行此操作?我一直在尝试探索Collectors.groupingBy的用法,我看到的大多数示例都是基于创建POJO的。

我一直在尝试写这样的东西
Map<String, List<String>> seqCpcGroupMap = pendingCpcList.stream().map(rec ->{
  String[] cpcRec = rec.split("-");
  return new Tuple2<>(cpcRec[0],cpcRec[1])
}).collect(Collectors.groupingBy(x->x.))

或者
Map<String, List<String>> seqCpcGroupMap = pendingCpcList.stream().map(rec ->{
  String[] cpcRec = rec.split("-");
  return Arrays.asList(cpcRec[0],cpcRec[1]);
}).collect(Collectors.groupingBy(x->(ArrayList<String>)x[0]));

我无法为groupingBy函数提供可以在其上发生groupingBy的任何键,有没有办法做到这一点,或者我必须创建一个POJO来使用groupingBy吗?

最佳答案

你可以这样做

Map<String, List<String>> result = source.stream()
    .map(s -> s.split("-"))
    .collect(Collectors.groupingBy(a -> a[0],
        Collectors.mapping(a -> a[1], Collectors.toList())));

10-06 00:57