请指导我迭代每个元素并打印
for (Entry<String, Map<String, Map<String, Map<String, List<TicketDetailsDTO>>>>> zones : zoneOrderedTicketList.entrySet()) {
for (String string : zones.getValue()) {
}
}
TicketDetailsDTO对象的名称和ID为字段
答案 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)