使用lambda的复杂对象列表中的多个操作

Jes*_*nas 4 java lambda java-8

让我们想象我有这个课程:

public class Borrow {
   private Float perCent;
   private Float rate;
}
Run Code Online (Sandbox Code Playgroud)

我有一个Borrow对象列表:

List<Borrow> moneyBorrowed = new ArrayList<Borrow>();
Run Code Online (Sandbox Code Playgroud)

对于每一个Borrow元素,我要乘perCentrate,总结所有的结果.

我想在Java 8中使用lambda表达式.我想使用这样的东西:

    moneyBorrowed.stream().forEach(p -> {
        p.getPerCent() * p.getRate()
    }).sum();
Run Code Online (Sandbox Code Playgroud)

但我运气不好......

有什么建议吗?

Era*_*ran 6

forEach 是一个没有返回值的终端操作,因此您不能将任何方法调用链接到它.

使用mapToDouble你转换Stream到一个DoubleStream,你可以总结:

double sum = moneyBorrowed.stream().mapToDouble(p -> p.getPerCent() * p.getRate()).sum();
Run Code Online (Sandbox Code Playgroud)


ass*_*ias 6

而不是forEach,您需要使用其中一种mapXxx方法.在你的情况下,你可以使用mapToDouble(没有mapToFloat方法):

double sum = moneyBorrowed.stream().mapToDouble(p -> p.getPerCent() * p.getRate()).sum();
Run Code Online (Sandbox Code Playgroud)