1、Lambda表达式Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递) 。使用它可以写出更简洁、更灵活的代码 。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升 。
1.1 语法组成
- 操作符为" -> " , 被称为 Lambda 操作符或箭头操作符;
- 将 Lambda 分为两个部分:
- 左侧:指定了 Lambda 表达式需要的参数列表;
- 右侧:指定了 Lambda 体,是抽象方法的实现逻辑,也即Lambda 表达式要执行的功能 。
@Slf4jpublic class TestLambda {//未使用和使用lambda表达式,对比static void testRunLambdaContrast(){// 不使用lambda表达式,创建一个线程Runnable runnable1 = new Runnable() {@Overridepublic void run() {log.info("------ 不使用lambda表达式,创建一个线程 ------");}};// 启动线程new Thread(runnable1).start();// 使用lambda表达式,创建一个线程Runnable runnable2 = () -> log.info("------ 使用lambda表达式,创建一个线程 ------");// 启动线程2new Thread(runnable2).start();}public static void main(String[] args) {//测试 未使用和使用lambda表达式,对比testRunLambdaContrast();}}
总结:未使用和使用Lambda表达式都可以实现抽象方法,但是使用Lambda方法后会更加简洁;1.2.2 带一个参数没有返回值1.2.2.1带一个参数没有返回值 标准写法
// 借助java8中 消费型函数式接口,讲解基本用法// 不使用lambda表达式实现Consumer<String> consumer1 = new Consumer<String>() {@Overridepublic void accept(String s) {log.info("------ 不使用lambda表达式,实现Consumer1接口,消费数据:{} ------",s);}};// 使用消费型接口1consumer1.accept("kh96正在学习lambda表达式 , 标准写法");// 使用lambda表达式,用法:带 1 个参数 , 没有返回值 , 标准写法Consumer<String> consumer2 = (String s) -> {log.info("------ 使用lambda表达式,实现Consumer2接口,消费数据:{} ------",s);};// 使用消费型接口2consumer2.accept("kh96正在学习lambda表达式,标准写法");
1.2.2.2 简化写法:一个参数 , 可以省略类型声明//一个参数,可以省略类型声明Consumer<String> consumer3 = (s) -> {log.info("------ 使用lambda表达式,实现Consumer3接口,消费数据:{} ------",s);};consumer3.accept("kh96正在学习lambda表达式,一个参数,可以省略类型声明");
1.2.2.3 简化写法:一个参数,可以省略小括号(没有参数,多个参数不能省略)//一个参数 , 可以省略小括号(没有参数,多个参数不能省略)Consumer<String> consumer4 = s -> {log.info("------ 使用lambda表达式,实现Consumer4接口,消费数据:{} ------",s);};consumer4.accept("kh96正在学习lambda表达式,一个参数,可以省略小括号");
1.2.2.4 简化写法:实现只有一条语句,可以省略大括号(有多条语句,不可以省略)//实现只有一条语句,可以省略大括号(有多条语句,不可以省略)Consumer<String> consumer5 = s -> log.info("------ 使用lambda表达式,实现Consumer3接口,消费数据:{} ------",s);consumer5.accept("kh96正在学习lambda表达式,实现只有一条语句,可以省略大括号");
1.2.2.5 简化写法:实现有多条语句,不可以省略大括号//实现有多条语句,不可以省略大括号Consumer<String> consumer6 = s -> {log.info("------ 使用lambda表达式,实现Consumer3接口 , 消费数据:{} ------",s);log.info("------ 使用lambda表达式 , 实现Consumer3接口,消费数据:{} ------",s);};consumer6.accept("kh96正在学习lambda表达式,实现有多条语句,不可以省略大括号");
1.2.3 带多个参数,有返回值1.2.3.1 未使用 lambda 表达式,用法:带多个参数 , 有返回值// 借助Comparator接口 , 讲解多个参数Comparator<Integer> comparator1 = new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o1.compareTo(o2);}};// 未使用lambda表达式,用法:带多个参数,有返回值log.info("------ 不使用lambda表达式 , 实现Comparator接口,比较12,23的大?。簕} ------",comparator1.compare(12,23));// 小于 -1,大于 1,等于 0
1.2.3.2 简化写法:省略参数类型 , 但是不可以省略小括号,一条语句省略大括号,跟返回值无关(不用手动加return)//省略参数类型,但是不可以省略小括号,一条语句省略大括号,跟返回值无关(不用手动加return)Comparator<Integer> comparator2 = (o1,o2) -> o1.compareTo(o2);log.info("------ 使用lambda表达式,实现Comparator接口,比较23,12的大?。簕} ------",comparator2.compare(23,12));// 大于 1
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 四 SpringBoot - 整合Mybatis,逆向工程,JPA
- 国窖1573和五粮液哪个档次高_国窖1573和五粮液哪个好喝
- 一篇文章带你掌握主流办公框架——SpringBoot
- 上海奢华五星级酒店——静安瑞吉ST REGIS 首先简单介绍一下瑞吉的的品牌背景
- 神舟5号资料 神舟五号资料
- 第五人格万圣节返场哪些皮肤
- 含具体案例 Java8新特性之Stream流
- 三 SpringBoot - Slf4j+logback 日志,异步请求,定时任务
- 五 微软出品自动化神器【Playwright+Java】系列 之常见点击事件操作
- 奥拉星手游石板解谜第五层怎么通关