繁体   English   中英

groupingBy&Java 8 - 分组后将地图转换为对象列表

[英]groupingBy & Java 8 - after groupingBy convert map to a list of objects

有没有办法我可以简化这个并直接将我从groupingBy获得的地图转换为具有键和值作为属性的元素列表? 并且没有2次转换流。

我在这里做的是我获取RiskItems然后将它们映射到DTO,之后我需要将它们按RiskItemDTO的属性 - RiskDTO分组,然后将所有这些分组为具有RiskDTO和coressponding RiskItemDTOs作为元素的元素列表。

 riskItemRepositoryCustom.findRiskItemsByRiskTypeName(riskTypeName)
            .stream()
            .map(mapper::mapToDTO)
            .collect(groupingBy(RiskItemDTO::getRisk))
            .entrySet()
            .stream()
            .map( entry -> new RiskWithRiskItemsDTO(entry.getKey(),entry.getValue()))
            .collect(Collectors.toList());

不,这是两个独立的流操作; 分组的结果是第二个管道的输入。

我知道很多人试图用尽可能少的分号来制作游戏,但目标应该是可读性和清晰度,而不是简洁性。 总的来说,我认为最好是对正在发生的事情保持诚实,并将其写为两个独立的流操作:

Map<RiskItemDTO, List<RiskItem> itemsByRisk = repo.findRiskItemsByRiskTypeName(riskTypeName)
        .stream()
        .map(mapper::mapToDTO)
        .collect(groupingBy(RiskItemDTO::getRisk));

List<RiskWithRiskItemsDTO> list = itemsByRisk.entrySet().stream()
        .map( entry -> new RiskWithRiskItemsDTO(entry.getKey(),entry.getValue()))
        .collect(Collectors.toList());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM