有什么方法可以简化这个过程,并将我从groupingBy获得的映射直接转换为一个元素列表,其中的键和值都是属性吗?不要有2倍的转换流。
我在这里要做的是获取RiskItems,然后将它们映射到DTO,之后我需要将它们按来自RiskItemDTO的属性分组-- RiskDTO,然后将所有这些组合成一个元素列表,其中包含RiskDTO并将RiskItemDTO作为元素进行编码。
riskItemRepositoryCustom.findRiskItemsByRiskTypeName(riskTypeName)
.stream()
.map(mapper::mapToDTO)
.collect(groupingBy(RiskItemDTO::getRisk))
.entrySet()
.stream()
.map( entry -> new RiskWithRiskItemsDTO(entry.getKey(),entry.getValue()))
.collect(Collectors.toList());发布于 2016-01-21 02:58:58
不,这是两个单独的流操作;分组的结果是对第二个管道的输入。
我知道很多人都试着用“尽量少用分号”来做游戏,但目标应该是可读性和清晰度,而不是简洁。总的来说,我认为最好诚实地了解正在发生的事情,并将其写成两个单独的流操作:
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());https://stackoverflow.com/questions/34913915
复制相似问题