让我们想象一下我有这个课程:
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();
但我没有太多运气......
有什么建议吗?
答案 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();