为了账号安全,请及时绑定邮箱和手机立即绑定

在 Java 8 中不使用 POJO 进行分组

在 Java 8 中不使用 POJO 进行分组

萧十郎 2021-12-22 20:20:05
我有一个用例,我需要读取一个文件并获取序列的分组以及与该序列关联的值列表。文件中这些记录的格式类似于sequence-val,示例10-A10-B11-C11-A我希望输出是一个映射 ( Map<String,List<String>>),以序列为键,将与其关联的值列表作为值,如下所示10,[A,B]11,[C,A]有没有办法在不为这些记录创建 POJO 的情况下做到这一点?我一直在尝试探索Collectors.groupingByPOJO的用法,并且我看到的大多数示例都基于创建 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?
查看完整描述

2 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

你可以这样做,


Map<String, List<String>> result = source.stream()

    .map(s -> s.split("-"))

    .collect(Collectors.groupingBy(a -> a[0], 

        Collectors.mapping(a -> a[1], Collectors.toList())));


查看完整回答
反对 回复 2021-12-22
?
catspeake

TA贡献1111条经验 获得超0个赞

或者,您可以Map.computeIfAbsent直接使用作为:


List<String> pendingCpcList = List.of("10-A","10-B","11-C","11-A");

Map<String, List<String>> seqCpcGroupMap = new HashMap<>();

pendingCpcList.stream().map(rec -> rec.split("-"))

        .forEach(a -> seqCpcGroupMap.computeIfAbsent(a[0], k -> new ArrayList<>()).add(a[1]));



查看完整回答
反对 回复 2021-12-22
  • 2 回答
  • 0 关注
  • 164 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信