【问题标题】:Java-8 lambda expression equivalent for traditional forJava-8 lambda 表达式等价于传统 for
【发布时间】:2017-04-10 11:05:09
【问题描述】:

我在 Java 7 中有一个 for 语句,它工作正常:

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();
    }
}

我想在 Java 8 中将我的代码转换为 Stream & collect 并返回一个双精度值

【问题讨论】:

  • 到目前为止,您尝试了什么? SO 不是翻译服务。
  • 非常感谢您制作的 cmets。但我试过了,但没有收到答案。

标签: java for-loop lambda java-8 java-stream


【解决方案1】:

以下应该可以工作:

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

【讨论】:

  • .flatMap(e -> iDistributionPlanService.loadByEntityId(e.getId()).getDistributedCredit()) 错误:类型不匹配:无法从 Set 转换为 Stream
  • 更新了答案,现在试试?
  • 非常感谢你亲爱的朋友,绝对正确。
  • 如果对您有帮助,您可以将答案标记为正确。
  • @DarshanMehta mapmapToDouble 可以合并到 mapToDouble(DistributedCredit::getDistributedAmount)
猜你喜欢
  • 1970-01-01
  • 2014-12-14
  • 2017-11-16
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 2015-07-05
相关资源
最近更新 更多