首页 > 解决方案 > mapToDouble 在 Java 中不适用

问题描述

我有一个需要计算或汇总的金额列表。在总结之前,我将其转换为双倍。问题是我使用 stream.mapToDouble 时出错。它说“Stream<Service.Report> 类型中的方法 mapToDouble(ToDoubleFunction<? super Service.Report>) 不适用于参数 (double)”。

我不确定为什么它是错误的,我认为代码是正确的。

         result.entrySet()
    .forEach(entry -> {
        
        String amthere = entry.getValue().get(5).tranamt; // list of amount
        double Amt = Double.parseDouble(amthere);           
        double sumAmtF = entry.getValue().stream().mapToDouble(Amt).sum();
        
        sb.append("&lt;rf2:TotalCollection")        
        .append(" rf2:location=").append("\"").append(entry.getKey()).append("\"") 
        .append(" rf2:totalamount=").append("\"").append(sumAmt).append("\"").append("&gt;"); 
                           

    });     
    }); 

标签: javaeclipsesumjava-stream

解决方案


entry.getValue()似乎是一个列表Service.Report。您必须选择tranamt属性,并且在求和之前mapToDouble()必须将每个属性解析为双精度。tranamt

double sumAmtF = entry.getValue()
  .stream()
  .map(report -> report.tranamt) // select tranamt attribute value
  .mapToDouble(Double::parseDouble) // parse each tranamt attribute value into double
  .sum();

推荐阅读