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

时间:2018-02-14 11:54:59

标签: java lambda java-8

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

public class Borrow {
   private Float perCent;
   private Float rate;
}

我有一个Borrow个对象列表:

List<Borrow> moneyBorrowed = new ArrayList<Borrow>();

对于每个Borrow元素,我需要将perCent乘以rate并将所有结果相加。

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

    moneyBorrowed.stream().forEach(p -> {
        p.getPerCent() * p.getRate()
    }).sum();

但我没有太多运气......

有什么建议吗?

2 个答案:

答案 0 :(得分:6)

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

使用mapToDouble将您的Stream转换为DoubleStream,您可以加总:

double sum = moneyBorrowed.stream().mapToDouble(p -> p.getPerCent() * p.getRate()).sum();

答案 1 :(得分:6)

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

double sum = moneyBorrowed.stream().mapToDouble(p -> p.getPerCent() * p.getRate()).sum();