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

如何遍历嵌套的 Map<Integer, List<abc>>

如何遍历嵌套的 Map<Integer, List<abc>>

小唯快跑啊 2023-03-31 16:55:16
如何遍历嵌套Map<Integer, List<abc>>Class Abc {    int id ;    String name;    Date startDate;    int rowNum;}List<Abc> dupList = list                    .stream()                    .collect(Collectors.groupingBy(Abc::getRowNum))                    .values()                    .stream()                    .filter(v-> v.size()>=2)                    .flatMap(List::stream)                    .collect(Collectors.toList());Map<Integer, List<Abc>> byRows = dupList                                 .stream()                              .collect(Collectors.groupingBy(Abc::getRowNum));Map contains fallowing dataKey             value(abc List)rowNum: 1       rowNum: 1                startDate: 01/01/2019                endDate:12/31/2099                name: Test1                Id:101rowNum: 1       rowNum: 1                startDate: 01/01/2020                endDate:12/31/2099                name: Test1                Id:111rowNum: 3       rowNum: 3                startDate: 01/01/2020                endDate:12/31/2099                name: Test4                Id:342rowNum: 3       rowNum: 3                startDate: 01/01/2020                endDate:12/31/2099                name: Test4                Id:348现在我想打印键的值和相应的 Abc 类列表。当我尝试打印地图时Map<Integer, List<Abc>> collect = byRows                                   .entrySet()                                   .stream()                                  .collect(Collectors.toMap(Map.Entry::getKey,                                                         Map.Entry::getValue));System.out.println(collect);我正在获取输出,因为{1=[Abc@1d72673f, Abc@1cffb7e0], 3=[Abc@522530e9, Abc@58dc69f2]} 我没有从 Abc 类的 ArrayList 的嵌套循环中获取实际值。预期输出:I want to print startDate for each all rows Ex: rowNum  startDate     1       01/01/2019 {startDate}            01/01/2020    3       startDate: 01/01/2020            startDate: 01/01/2020
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

您需要覆盖 Abc 的 toString() 方法。当您调用“System.out.println”时,它将调用 toString() 方法并返回结果。



查看完整回答
反对 回复 2023-03-31
?
慕村225694

TA贡献1880条经验 获得超4个赞

基本上,如果列表有 2 个元素,你就是在分组rowNum和过滤。所以你可以一步完成这一切。无需两次分组


Map<Integer, List<Term>> collect = list

                .stream()

                .collect(Collectors.groupingBy(Abc::getRowNum))

                .entrySet()

                .stream()

                .filter(v-> v.getValue().size()>=2)

                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

然后如果你想打印每个元素然后Map使用forEach,你仍然可能需要根据你的要求格式化数据


collect.forEach((k,v)-> {

             System.out.println("RowNum is :"+k);

             v.forEach(o->System.out.println(o.getStartDate()));

           });


查看完整回答
反对 回复 2023-03-31
  • 2 回答
  • 0 关注
  • 120 浏览

添加回答

举报

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