如何使用Double数据类型减少流

sam*_*t90 3 java lambda java-8 java-stream

我有一个ArrayList用户定义的对象employee作为

class Employee {
    String name;
    Double age;
    Double salary
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试通过以下代码将上述列表减少为流

Double totalSalary = empList.stream().parallel().filter(x-> x.getname().equalsIgnoreCase("XYZ")).reduce(0,(subTotal, sal)-> subTotal + dp.getSalary(), DoubleExpression::add);
Run Code Online (Sandbox Code Playgroud)

这不会编译并给出错误。我如何实现我的期望目标?

Rav*_*ala 6

首先,您必须map将Employee对象转换为双倍薪水。然后,只有您可以执行还原步骤。此外,归约步骤采用一个标识元素和一个二元运算符。但是您在此处传递了三个论点,这也是有缺陷的。

double totalSalary = empList.stream()
    .filter(x -> x.getName().equalsIgnoreCase("XYZ"))
    .mapToDouble(Employee::getSalary)
    .sum();
Run Code Online (Sandbox Code Playgroud)

这是等效的减少量。请注意,0是此缩减的标识元素。

double totalSalary = empList.stream()
    .filter(x -> x.getName().equalsIgnoreCase("XYZ"))
    .mapToDouble(Employee::getSalary)
    .reduce(0, Double::sum);
Run Code Online (Sandbox Code Playgroud)