使用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
相关产品推荐
相关产品推荐

