cod*_*er3 1 java functional-programming list java-8 java-stream
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;
}
Run Code Online (Sandbox Code Playgroud)
看看文档:
可选的减少?(BinaryOperator 累加器)
使用关联累积函数对此流的元素执行缩减,并返回描述缩减值的 Optional(如果有)。
这意味着reduce需要一个BinaryOperator<T>- 一个特定的函数,它需要两个类型的参数T并产生一个具有相同类型的参数。
您的流可能有任意数量的Coder实例,reduce 函数需要两个Coders 并返回第二个。这意味着,如果有任何内容,则从整个流Coder中Optional返回最后一个包裹的内容,Optional如果该流最初是空的,则返回空内容。
请注意,这可以更有效地编写:
coders.stream()
.max(Comparator.comparing(BMICalculator::calculateBMI))
.orElse(null);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |