文章插图
一、概述
1、是什么
Lambda表达式是一个匿名函数,即没有函数名的函数 。也可以理解成是一段可以传递的代码(将代码像数据一样进行传递),这样一来代码更加简洁 。
2、为什么
- 代码简洁
- 可能还有一些优化,但是目前没研究,研究到的时候再来补充 。
param -> body
1.中间以 -> 隔开形成左右两部分 。我们称->为箭头操作符 。2.表达式左边:Lambda表达式的参数列表 。3.表达式右边:Lambda表达式中所需执行的功能,即Lambda体 。三、语法格式
1、无参无返回
方法没参数且没返回值,比如public void test() {System.out.println("hello")},用lambda表达式,首先看我们的Lambda组成公式:param -> body 。无参就用()代替,那么就是() -> body,方法体是输出语句,所以:() -> System.out.println("hello"),别问我方法名称在哪?第一个就说了,匿名函数,即没有函数名的函数 。
2、一参无返回
方法有一个参数且没返回值,比如:public void test(int a) {System.out.println(a)},用lambda表达式,首先看我们的Lambda组成公式:param -> body 。有参数就放到()里就行了,那么就是(int a) -> System.out.println(a)
值得注意的是:1.若参数只有一个,则我们可以省略小括号,如下:int a -> System.out.println(a)2.我们可以省略参数类型,因为jdk会为我们自动推断 。如下:a -> System.out.println(a)3、多参无返回
方法有一个以上参数且没返回值,比如:public void test(int a, String b) {System.out.println(a + ":" + b)},用lambda表达式,首先看我们的Lambda组成公式:param -> body 。有参数就放到()里就行了,那么就是(int a, String b) -> {System.out.println(a + ":" + b)}
值得注意的是:1.若参数只有一个,则我们可以省略小括号,但是一个以上就不能省略了 。2.我们可以省略参数类型,因为jdk会为我们自动推断 。如下:(a, b) -> {System.out.println(a + ":" + b)}4、多参有返回
方法有一个以上参数且有返回值,比如:public String test(int a, String b) {return a + ":" + b},用lambda表达式,首先看我们的Lambda组成公式:param -> body 。有参数就放到()里就行了,那么就是(int a, String b) -> {return a + ":" + b}
值得注意的是:1.若参数只有一个,则我们可以省略小括号,但是一个以上就不能省略了 。2.我们可以省略参数类型,因为jdk会为我们自动推断 。如下:(a, b) -> {return a + ":" + b}5、体只有一条
首先看我们的Lambda组成公式:param -> body 。体只有一条的意思是body只有一条语句 。多条语句不可省略这种情况下我们可以省略{},且不管你有无返回值都可以省略return 。多条语句不可省略 。比如:public void test(int a) {System.out.println(a)}会写成: a -> System.out.println(a)比如:public int test(int a) {return a + 100}会写成: a -> a + 100
四、实战演示
1、无参无返回
/*** 无参无返回,我们以Runnable接口为例,因为Runnable的run()方法就是无参无返回的 。*/private static void test1() { Runnable runnable = new Runnable() { @Override public void run() { System.out.println("test1"); } }; runnable.run();}public static void main(String[] args) { test1(); /** * lambda的方式重写无参无返回 。* 说明一下:这里的无参无返回指的是Runnable接口的run方法无参无返回,至于细节问题,先不管,下一章节你秒懂 。* 现在你只需要知道lambda真的很简单! */ Runnable runnable = () -> System.out.println("test1"); runnable.run();}2、一参无返回
/*** 一参无返回*/private static void test2(int a) { System.out.println("a=" + a);}public static void main(String[] args) { test2(1); /** * lambda的方式重写一参无返回 。* 说明一下:这里的无参无返回指的是Consumer接口的accept方法一参无返回,你会问Consumer是什么,先不管,下一章节你秒懂 。* 现在你只需要知道lambda真的很简单! */ Consumer<Integer> consumer = (a) -> System.out.println("a=" + a); consumer.accept(1); //---------------------------一参可省略小括号-----------------------------------// Consumer<Integer> consumer2 = a -> System.out.println("a=" + a); consumer2.accept(1);}// 多参无返回同理,不写了 。,直接搞多参有返回吧3、多参有返回
public static void main(String[] args) { /** * 多参有返回,这里拿比较接口来做案例 */ Comparator<Integer> comparator2 = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { System.out.println("多参有返回"); return Integer.compare(o1, o2); } }; /** * lambda的方式重写多参有返回 。* 说明一下:这里的多参无返回指的是Comparator接口的compare方法多参有返回,细节先不管,下一章节你秒懂 。* 现在你只需要知道lambda真的很简单! */ Comparator<Integer> comparator = (a, b) -> { // 需要注意的是:body多行,{}不能省略 。System.out.println("多参有返回"); return a.compareTo(b); };}
推荐阅读
- 怎样才能做到科学饮茶呢
- Python正则表达式详解
- MySQL从入门到进阶,看这一篇文章就够了
- 一文让你理解 Lambda 表达式
- docker安装php
- 一篇文章带你读懂中国六大茶
- 补水|如何摆脱大油皮的困扰,一篇教你清爽过夏!
- 一篇文章带你理解Spring框架
- 快速掌握Linux系统grep命令及正则表达式
- 有这一篇就够了!西藏区内十条常规线路总结