【Java_17】Lambda 表达式

2021-02-04 10:07:08 浏览数 (1)

一、函数式编程思想

1. 面向对象思想
代码语言:javascript复制
* 做一件事情:找一个可以解决这个事情的对象,调用方法完成
2. 函数式编程思想
代码语言:javascript复制
* 只要可以获取结果,不论是谁完成的。
3. 举例
代码语言:javascript复制
* 我们上楼,可以走楼梯,也可以坐电梯,还可以爬上去。
    - 面向对象:走楼梯方法,坐电梯方法,爬上去方法
    - 函数式: 我上去了。

二、Lambda 的标准格式

1. (参数类型 变量名) -> {一些方法}
代码语言:javascript复制
() :与传统方式一样,无参是留空
-> :表示指向
{} :与传统方法一致
2. 示例
代码语言:javascript复制
//匿名内部类创建线程任务
new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("匿名内部类方式");
        }
    }).start();

//Lambda 表达式创建线程任务
new Thread(() -> {System.out.println("lambda表达式方式");}).start();
3. 注意事项
代码语言:javascript复制
① 使用 Lambda 表达式必须含有接口且接口中只能有一个抽象方法
② 可以通过上下文能够判断省略的内容
    示例
        () -> System.out.println("赛尔号")
        # JVM 不知道它是个啥
4. 省略格式
代码语言:javascript复制
① () : 小括号内的参数类型可以省略
② () : 若只有一个参数则小括号也可省略
③ {} :若大括号内只有一行代码则{}、;、return都可以省略(一旦省略必须全部省略)
5. 示例
代码语言:javascript复制
//定义接口
public interface Person {
    public abstract void show(String s);
}

//示例
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
public class DemoLambda {
    public static void main(String[] args) {
        //创建线程池
        ExecutorService threadPool = Executors.newFixedThreadPool(5);
 
        //无参标准格式
        new Thread(() -> {
            System.out.println("lambda表达式方式");
        }).start();
 
        //省略格式
        threadPool.submit(() -> System.out.println("赛尔号"));
 
        //带参标准格式
        test("猪猪侠",(String s) -> {
            System.out.println(s);
        });
 
        //省略格式
        test("大傻",s -> System.out.println(s));
 
    }
 
    public static void test(String s,Person p) {
        p.show(s);
    }
}

0 人点赞