如何将嵌套Map<TipoQuestionario,Map<AvaliadorEventoDTO,List<EventoQuestaoDTO>>>转为EventoAvaliacaoDTO
实现方案
你需要遍历双层Map的所有键值对,将每一组TipoQuestionario、AvaliadorEventoDTO、对应的List<EventoQuestaoDTO>封装为EventoAvaliacaoDTO对象即可,最终会得到List<EventoAvaliacaoDTO>集合。
1. 传统for循环实现
// 假设你的原始双层Map变量名为 nestedMap Map<TipoQuestionario, Map<AvaliadorEventoDTO, List<EventoQuestaoDTO>>> nestedMap = // 你的原始Map对象 List<EventoAvaliacaoDTO> resultList = new ArrayList<>(); // 遍历外层Map:key是TipoQuestionario,value是内层Map for (Map.Entry<TipoQuestionario, Map<AvaliadorEventoDTO, List<EventoQuestaoDTO>>> outerEntry : nestedMap.entrySet()) { TipoQuestionario tipo = outerEntry.getKey(); Map<AvaliadorEventoDTO, List<EventoQuestaoDTO>> innerMap = outerEntry.getValue(); // 遍历内层Map:key是AvaliadorEventoDTO,value是问题列表 for (Map.Entry<AvaliadorEventoDTO, List<EventoQuestaoDTO>> innerEntry : innerMap.entrySet()) { AvaliadorEventoDTO avaliador = innerEntry.getKey(); List<EventoQuestaoDTO> questaoList = innerEntry.getValue(); // 用全参构造直接生成DTO,也可换用setter逐个赋值 EventoAvaliacaoDTO dto = new EventoAvaliacaoDTO(tipo, avaliador, questaoList); resultList.add(dto); } }
2. Java 8+ Stream流式实现(更简洁)
List<EventoAvaliacaoDTO> resultList = nestedMap.entrySet().stream() .flatMap(outerEntry -> outerEntry.getValue().entrySet().stream() .map(innerEntry -> new EventoAvaliacaoDTO( outerEntry.getKey(), innerEntry.getKey(), innerEntry.getValue() )) ) .collect(Collectors.toList());
注意事项
- 你的
EventoAvaliacaoDTO已经添加了@AllArgsConstructor全参注解,所以可以直接用构造方法赋值,不需要额外调用setter - 如果业务需要避免引用传递问题,可以对
List<EventoQuestaoDTO>做深拷贝后再赋值到DTO中
内容的提问来源于stack exchange,提问作者Romeu Fernandes Bessa
相关产品推荐
相关产品推荐

