You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将嵌套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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:24:09