Lambda 表达式支持将代码块作为方法参数

    1. public class CommandTest
    2. {
    3. public static void main(String[] args)
    4. {
    5. var pa = new ProcessArray();
    6. int[] target = [3,-4,6,4];
    7. // 处理数组,具体处理行为取决于匿名内部类
    8. pa.process(array,(int element)->{System.out.println("数组元素的平方是:"+element * element);});
    9. }
    10. }
    1. interface Eatble
    2. {
    3. void taste();
    4. }
    5. interface Flyable
    6. {
    7. void fly(String weather);
    8. }
    9. interface Addable
    10. {
    11. int add(int a, int b);
    12. }
    13. public class LambdaQs
    14. {
    15. // 调用该方法需要Eatable 对象
    16. public void eat(Eatable e)
    17. {
    18. System.out.println(e);
    19. e.taste();
    20. }
    21. // 调用该方法需要Flyable 对象
    22. public void drive(Flyable f)
    23. {
    24. System.out.println("我在驾驶"+ f);
    25. f.fly("【碧空如洗的晴日】");
    26. }
    27. //调用该方法需要Addable 对象
    28. public void test(Addable add)
    29. {
    30. System.out.println("5与3的和为:"+ add.add(5,3));
    31. }
    32. public static void main(String[] args)
    33. {
    34. var lq = new LambdaQs();
    35. // Lambda表达式的代码块只有一条语句可以省略花括号
    36. lq.eat(()->System.out.println("苹果的味道不错"));
    37. //Lambda表达式的形参列表只有一个形参,可以省略圆括号
    38. lq.drive(weather->{
    39. System.out.println("今天天气是:"+ weather);
    40. System.out.println("直升机飞行平稳");
    41. });
    42. //Lambda 表达式的代码块只有一条语句,可以省略花括号
    43. // 代码块中只有一条语句,即使该表达式需要返回值,也可以省略return 关键字
    44. lq.test((a,b) -> a+b);
    45. }
    46. }

    Lambda 表达式的类型,也被称为“目标类型(target type)”