Java迭代嵌套映射

时间:2014-10-09 04:31:09

标签: java algorithm loops for-loop

请指导我迭代每个元素并打印

        for (Entry<String, Map<String, Map<String, Map<String, List<TicketDetailsDTO>>>>> zones : zoneOrderedTicketList.entrySet()) {
            for (String string : zones.getValue()) {

            }
        }

TicketDetailsDTO对象的名称和ID为字段

2 个答案:

答案 0 :(得分:1)

试试这个,

for (Entry<String, Map<String, Map<String, Map<String, List<TicketDetailsDTO>>>>> zones : zoneOrderedTicketList.entrySet()) {
         for(Entry<String, Map<String, Map<String, List<TicketDetailsDTO>>>> map2 : zones.getValue().entrySet()){
             for( Entry<String, Map<String, List<TicketDetailsDTO>>> map3 : map2.getValue().entrySet()){
                 for(Entry<String, List<TicketDetailsDTO>> map4: map3.getValue().entrySet()){
                     for(TicketDetailsDTO ticketDetailsDTO : map4.getValue()){
                         // Play with your code here 
                     }
                 }
             }
         }
    }

答案 1 :(得分:0)

数据结构太可怕了。最近似乎有一种倾向于将表示为嵌套地图。树不是嵌套地图。树木是树木。您应明确对此进行审核。

但是,关于迭代嵌套映射的一般问题:Java 8中的Stream#flatMap方法允许展平嵌套结构。用于实现所描述目标的惯用(注意“ma”!)方法的基本草图大致如下:

Map<String, Map<String, Map<String, Map<String, List<TicketDetailsDTO>>>>> zoneOrderedTicketList =
    new LinkedHashMap<String, Map<String, Map<String, Map<String, List<TicketDetailsDTO>>>>>();

Stream<Entry<String, List<TicketDetailsDTO>>> stream =
    zoneOrderedTicketList.entrySet().stream().flatMap(
        (e0) -> e0.getValue().entrySet().stream().flatMap(
            (e1) -> e1.getValue().entrySet().stream().flatMap(
                (e2) -> e2.getValue().entrySet().stream())));
stream.forEach((e3) -> {
    List<TicketDetailsDTO> list = e3.getValue();
    System.out.println(list);
});

(甚至不需要将流存储在stream变量中。但是直接在结果流上调用forEach至少会导致Eclipse类型推断挽救并考虑包含的对象作为Object,而不是Entry s)