2017-04-10 93 views
0

我有一個for聲明在Java 7中,它的做工精細:Java的8 lambda表達式等同於傳統的

Double totalDistributedCredit = 0D; 
Set<DistributionPlan> distributionPlanList = loadByEntityId(creditResourceId).getDistributionPlan(); 
for (DistributionPlan distributionPlan : distributionPlanList) { 
    Set<DistributedCredit> distributedCreditList = iDistributionPlanService.loadByEntityId(distributionPlan.getId()).getDistributedCredit(); 
    for (DistributedCredit distributedCredit : distributedCreditList) { 
     totalDistributedCredit += distributedCredit.getDistributedAmount(); 
    } 
} 

我想轉換我的代碼爲Stream &收集的Java 8和返回一個雙值爲

+1

還有,你試過這麼遠嗎? SO不是翻譯服務。 – f1sh

+0

非常感謝您提出的意見。但我試過了,但沒有收到答案。 –

回答

0

下面應該工作:

double sum = distributionPlanList.stream() 
    .flatMap(e -> iDistributionPlanService.loadByEntityId(e.getId()).getDistributedCredit().stream()) 
    .map(dc -> dc.getDistributedAmount()) 
    .mapToDouble(Double::doubleValue) 
    .sum(); 
+0

.flatMap(e - > iDistributionPlanService.loadByEntityId(e.getId())。getDistributedCredit()) 錯誤:類型不匹配:無法從Set 轉換爲Stream <?擴展對象> –

+0

更新了答案,現在試試? –

+0

非常感謝您的親愛的朋友,絕對正確。 –