1. 程式人生 > >使用lambda表達式對相同屬性的實體進行合並

使用lambda表達式對相同屬性的實體進行合並

group dal get val pre collect reac 屬性 分享

List<CrmAuthorizedInfo> crmAuthorizedInfos =
                flowPlanInfoMapper.findAllByEncode(stationForm.getOperatorId(), stationIds);

技術分享圖片

  • 首先的我數據在很多的屬性上都是相同的.
crmAuthorizedInfos.parallelStream()
                    .collect(Collectors.groupingBy(CrmAuthorizedInfo::getStationId, Collectors.toList()))
                    .forEach((k, v) -> {
                        AuthorizedStationInfo authorizedStationInfo = new AuthorizedStationInfo();
                        authorizedStationInfo.setStationId(k);
                        List<AuthorizedPileInfo> authorizedPileInfos = new ArrayList<>();
                        v.parallelStream().collect(Collectors.groupingBy(CrmAuthorizedInfo::getPileId, Collectors.toList())).forEach((k1, v1) -> {
                            AuthorizedPileInfo authorizedPileInfo = new AuthorizedPileInfo();
                            authorizedPileInfo.setPileId(k1);
                            authorizedPileInfo.setGunIds(v1.stream().map(CrmAuthorizedInfo::getGunId).collect(Collectors.toList()));
                            authorizedPileInfos.add(authorizedPileInfo);
                        });
                        authorizedStationInfo.setPileIds(authorizedPileInfos);
                        authorizedStationInfos.add(authorizedStationInfo);
                    });
  • 通過流處理,groupingBy()分組將stationId相同的屬性合並.會生成一個(key,value)的maplist.

技術分享圖片

  • k是設置的相同電站id,v則是相同k的list集合.然後在對相同stationid下的pile進行分組合並.同樣生成了(k,v)的maplist結構.剩下的就是設置屬性了.結果就生成了這樣的數據.

技術分享圖片

使用lambda表達式對相同屬性的實體進行合並