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

使用Java Lambda将嵌套Map转换为DTO列表 替换for循环优化代码

优化实现方案

你可以直接基于嵌套Map的entrySet做流式处理,完全替换两层显式for循环,还可以省略中间的Map变量声明,代码更简洁:

List<EventoQuestaoDTO> list = new ArrayList<>(
        eventoQuestaoService.buscarEventoQuestaoDTO(empresa, evento, idioma,
                inscTipoTrabAval.getAvaliadorEvento().getId(), inscTipoTrabAval.getInscricaoTipoTrabalho().getId(), inscTipoTrabAval.getId()));

List<EventoAvaliacaoDTO> avaliacoes = list.stream()
        // 原有两级分组逻辑保留
        .collect(Collectors.groupingBy(
                EventoQuestaoDTO::getAvaliadorEvento,
                Collectors.groupingBy(EventoQuestaoDTO::getTipoQuestionario)
        ))
        // 处理外层分组,转换为EventoAvaliacaoDTO
        .entrySet()
        .stream()
        .map(avaliadorEntry -> new EventoAvaliacaoDTO(
                avaliadorEntry.getKey(),
                // 处理内层分组,转换为QuestionarioDTO列表
                avaliadorEntry.getValue().entrySet()
                        .stream()
                        .map(qEntry -> new QuestionarioDTO(qEntry.getKey(), qEntry.getValue()))
                        .collect(Collectors.toList())
        ))
        .collect(Collectors.toList());

补充说明

  • 所有逻辑和原有for循环完全对齐,执行结果没有任何差异
  • 如果你使用的是Java 16及以上版本,可以把所有Collectors.toList()替换为更简洁的toList()方法,无需引入Collectors工具类
  • 如果不需要复用中间的分组Map,完全可以省略该变量的单独声明,直接把分组和转换逻辑串成一条流式调用链

内容的提问来源于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.24 03:24:03