3.9 数学中的类似思想

从数学的角度看待函数传递的思想和Lambda表达式

3.9.1 积分

对于一个数学函数\(f(x) = x + 10\)

\[\displaystyle \int^{7}_{3}{f(x)dx} = \displaystyle \int^{7}_{3}{(x + 10)dx} \]

图形上表现为梯形,实际计算它的面积

\(\frac{1}{2} \times ((3 + 10) + (7 + 10)) \times (7 - 3) = 60\)

用Java表达

integrate(f, 3, 7),其中第1个参数为数学函数,第2个参数为积分下限,第3个参数为积分上限。

注意f不能写成x+10

  1. x的作用域不清楚;
  2. 会将x+10表达式的值传给方法,而不是传递函数;

f(x)dx的数学含义为x为自变量,结果为f(x)的数学函数。

3.9.2 与Java 8的Lambda联系起来

Lambda表达了函数的含义

函数描述符为double->double

public double integrate(DoubleFunction<Double> f, double a, double b) {
    return (f.apply(a) + f.apply(b)) * (b - a) / 2.0;
}

// invoke
integrate(((double x) -> x + 10), 3, 7); // 60.0

注意事项:

  1. Lambda表达式接收函数式接口,例如Function,而不能写成函数描述符(double -> double);
  2. 函数无法完全独立,必须基于对象使用,例如f.apply(a),而不能写成f(a);
posted @ 2023-06-28 17:49  夜是故乡明  阅读(21)  评论(0编辑  收藏  举报