1.Lambda表达式

1.1 体验lambda表达式【理解】

  • 案例需求

启动一个线程,在控制台输出一句话:多线程程序启动了

  • 实现方式一
    • 实现步骤
      • 定义一个类MyRunnable实现Runnable接口,重写run()方法
      • 创建MyRunnable类的对象
      • 创建Thread类的对象,把MyRunnable的对象作为构造参数传递
      • 启动线程 ```java public class LambdaDemo { public static void main(String[] args) { //创建一个Thread类对象,把MyRunnable的对象作为构造参数
        Thread thread = new Thread(new MyRunable()); //启动线程 thread.run(); } }

//定义一个类实现Runnable接口,重写Run方法 class MyRunable implements Runnable{ @Override public void run() { System.out.println(“线程启动了”); } }

  1. - 实现方式二
  2. - 匿名内部类的方式改进
  3. ```java
  4. public class LambdaDemo {
  5. public static void main(String[] args) {
  6. Thread thread = new Thread(new Runnable() {
  7. @Override
  8. public void run() {
  9. System.out.println("线程启动了");
  10. }
  11. });
  12. //启动线程
  13. thread.run();
  14. }
  15. }
  • 实现方式三
    • lambda表达式的方式改进 ```java public class LambdaDemo { public static void main(String[] args) { Thread thread = new Thread(() -> System.out.println(“线程启动了”)); //启动线程 thread.run(); }

}

  1. - 函数式编程的思想概述
  2. 函数式思想则尽量忽略面向对象的复杂语法:“强调做什么,而不是以什么形式去做”
  3. 而我们要学习的Lambda表达式就是函数式编程的体现
  4. <a name="f9Cmx"></a>
  5. ### 1.2 lambda表达式的标准格式【理解】
  6. - 格式:
  7. (形式参数) -> {代码块}
  8. - 形式参数:如果有多个参数,参数用都逗号隔开;如果没有参数留空即可
  9. - ->:由英文中划线和大于符号组成,固定写法。代表指向动作
  10. - 代码块:是我们具体要做的事情,也就是以前我们写的方法体内容
  11. - 组成lambda表达式的三要素:
  12. - 形式参数,箭头,代码块
  13. <a name="o8tKG"></a>
  14. ### 1.3 lambda表达式练习1 (无参无返回值)【应用】
  15. - lambda表达式使用的前提
  16. - 有一个接口
  17. - 接口中有且仅有一个抽象方法
  18. - 练习描述
  19. 无参无返回值抽象方法的练习
  20. - 操作步骤
  21. - 定义一个接口(interfase),接口定义一个抽象方法void method();
  22. - 定义一个测试类(interfaseDemo),在测试类中提供两个方法
  23. - 一个方法是:useinterfase(interfase i)
  24. - 一个方法是主方法,在主方法中调用useInterfase方法
  25. - 代码示例
  26. ```java
  27. public class LambdaDemo01 {
  28. public static void main(String[] args) {
  29. useInterfase(()-> System.out.println("hello,world"));
  30. }
  31. static void useInterfase(interfase i){
  32. i.method();
  33. }
  34. }
  35. @FunctionalInterface
  36. interface interfase{
  37. void method();
  38. }

1.4 lambda表达式练习2 (有参无返回值)【应用】

  • 练习描述
    • 有参无返回值的抽象方法练习
  • 操作步骤
    • 定义一个接口(Interfase),里面定义一个抽象方法 void method(String s)
    • 定义一个测试类(InterfaseDemo),在测试类中提供两个方法:
      • 一个方法是useInterfase(Interfase i)
      • 一个方法是主方法,在主方法中调用useInterfase方法
  • 代码示例 ```java public class LambdaDemo02 { public static void main(String[] args) {

    1. useInterfase1(s-> System.out.println(s));

    }

    private static void useInterfase1(interfase1 i) {

    1. i.method1("这是method1的参数");

    } }

@FunctionalInterface interface interfase1 { void method1(String s);

}

  1. <a name="JHnFd"></a>
  2. ### 1.5 lambda表达式练习3 (有参有返回值) 【应用】
  3. - 练习描述<br />有参有返回值抽象方法的练习
  4. - 操作步骤
  5. - 定义一个接口(Addable),里面定义一个抽象方法:int add(int x,int y);
  6. - 定义一个测试类(AddableDemo),在测试类中提供两个方法
  7. - 一个方法是:useAddable(Addable a)
  8. - 一个方法是主方法,在主方法中调用useAddable方法
  9. - 示例代码
  10. ```java
  11. public class AddDemo {
  12. public static void main(String[] args) {
  13. System.out.println(useAddAble((int a, int b) -> a + b));
  14. }
  15. static int useAddAble(addAble a){
  16. return a.add(10, 20);
  17. }
  18. }
  19. @FunctionalInterface
  20. interface addAble{
  21. int add(int a,int b);
  22. }

1.6 lambda表达式的省略模式 【应用】

  • 省略的规则
    • 参数类型可以省略。但是有多个参数的情况下,不能只省略一个
    • 如果参数有且仅有一个,那么小括号可以省略
    • 如果代码块的语句只有一条,可以省略大括号和分号,和return关键字
  • 代码演示