1 Lambda 表达式

与 C++ 以及 Python 中的差不多,总体而言类似“匿名函数”或“函数指针”;在 Java 中实际上是“匿名类的一个实例”。
( params ) -> body
image.png
上例中由于只有一条语句,所以 -> 右侧可以不加花括号。

Lambda 表达式实际上是一个接口,或者接口函数
】接口与 lambda 表达式

  1. @FunctionalInterface
  2. interface Fun { double fun( double x );}
  3. public class LambdaIntegral
  4. {
  5. public static void main(String[] args) {
  6. double d = Integral( new Fun() {
  7. public double fun(double x) {
  8. return Math.sin(x);
  9. }
  10. }, 0, Math.PI, 1e-5 );
  11. d = Integral( x->Math.sin(x),
  12. 0, Math.PI, 1e-5 );
  13. System.out.println( d );
  14. d = Integral( x->x*x, 0, 1, 1e-5 );
  15. System.out.println( d );
  16. }
  17. // 求积分
  18. static double Integral(Fun f, double a, double b, double eps) {
  19. int n,k;
  20. double fa,fb,h,t1,p,s,x,t=0;
  21. fa=f.fun(a);
  22. fb=f.fun(b);
  23. n=1;
  24. h=b-a;
  25. t1=h*(fa+fb)/2.0;
  26. p=Double.MAX_VALUE;
  27. while (p>=eps) {
  28. s=0.0;
  29. for (k=0;k<=n-1;k++) {
  30. x=a+(k+0.5)*h;
  31. s=s+f.fun(x);
  32. }
  33. t=(t1+h*s)/2.0;
  34. p=Math.abs(t1-t);
  35. t1=t;
  36. n=n+n;
  37. h=h/2.0;
  38. }
  39. return t;
  40. }
  41. }

能写成 Lambda 的接口
image.png

】排序
image.png

由此可见,lambda 表达式将代码当成数据来处理。这一定程度上体现了函数式编程的思想。

2 装箱与拆箱

image.png
image.png

3 枚举

image.png

由于 Java 中的枚举实际上是一个类,所以也可以拥有其他字段、方法等
image.png

4 注解

image.png
image.png