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


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結構.剩下的就是設置屬性了.結果就生成了這樣的數據.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM