[英]Java Stream Reduce Method
reduce 方法在这里实际做什么? 我已经阅读了 Oracle 文档,但我仍然不明白这个例子中的 reduce 方法在做什么
public static Coder findCoderWithWorstBMI(List<Coder> coders) {
return coders.stream().sorted(Comparator.comparing(BMICalculator::calculateBMI))
.reduce((first, second) -> second).orElse(null);
}
private static double calculateBMI(Coder coder) {
double height = coder.getHeight();
double weight = coder.getWeight();
if (height == 0.0)
throw new ArithmeticException();
double bmi = weight / (height * height);
return Math.round(bmi * 100) / 100.0;
}
看看文档:
可选的reduce (BinaryOperator accumulator)
使用关联累积函数对此流的元素执行缩减,并返回描述缩减值的 Optional(如果有)。
这意味着reduce
需要一个BinaryOperator<T>
- 一个特定的函数,它接受两个T
类型的参数并生成一个具有相同类型的参数。
您的流可能有任意数量的Coder
实例, Coder
函数采用两个Coder
并返回第二个。 这意味着,如果有任何和空的Optional
如果流首先是空的,则从整个流中返回包装在Optional
的最后一个Coder
。
请注意,这可以更有效地编写:
coders.stream()
.max(Comparator.comparing(BMICalculator::calculateBMI))
.orElse(null);
.reduce((first, second) -> second).orElse(null);
如果存在第一个和第二个值,reduce 方法将执行其他 orElse(null) 接受 null 将返回 null。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.