猿问

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

如何遍历嵌套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 data

Key             value(abc List)

rowNum: 1       rowNum: 1

                startDate: 01/01/2019

                endDate:12/31/2099

                name: Test1

                Id:101

rowNum: 1       rowNum: 1

                startDate: 01/01/2020

                endDate:12/31/2099

                name: Test1

                Id:111

rowNum: 3       rowNum: 3

                startDate: 01/01/2020

                endDate:12/31/2099

                name: Test4

                Id:342

rowNum: 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


小唯快跑啊
浏览 121回答 2
2回答

守着星空守着你

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

慕村225694

基本上,如果列表有 2 个元素,你就是在分组rowNum和过滤。所以你可以一步完成这一切。无需两次分组Map<Integer, List<Term>> collect = list&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.groupingBy(Abc::getRowNum))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .entrySet()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .filter(v-> v.getValue().size()>=2)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));然后如果你想打印每个元素然后Map使用forEach,你仍然可能需要根据你的要求格式化数据collect.forEach((k,v)-> {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println("RowNum is :"+k);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;v.forEach(o->System.out.println(o.getStartDate()));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;});
随时随地看视频慕课网APP

相关分类

Java
我要回答