一、lambda表达式的写法
package test; //构造线程的两种方式:1、实现Runnable接口 2、继承Thread类 public class Test14 { public static void main(String[] args) { Thread thread = new Thread(new MyThread()); thread.start(); Thread t2 = new Thread(new Runnable() { //匿名内部类 public void run() { System.out.println("run2"); } }); t2.start(); //lambda表达式 //使用条件: //1、花括弧里面必须传的是接口 //2、接口里只能有一个方法 //()里代表的是 接口里面的抽象方法传的参数,没有就写() //箭头后面的是 抽象方法的内容 Thread t3 = new Thread(() -> { //传的是接口 System.out.println("run3"); } ); t3.start(); } } class MyThread implements Runnable{ public void run() { System.out.println("run"); } }
lambda表达式是匿名内部类的简写,匿名内部类是new Thread()对象的简写。
二、lambda表达式的使用条件
1、花括弧里面必须传的是接口
2、接口里只能有一个方法
三、lambda表达式写法的含义
- ()里代表的是 接口里面的抽象方法传的参数,没有就写()
- 箭头后面的是 抽象方法的内容
Thread t3 = new Thread( () -> { //传的是接口 System.out.println("run3"); } );
四、lambda表达式的简写
-
如果花括弧里的表达式只有一个,可以不写花括弧,直接写表达式
-
如果接口的参数只有一个,就可以省略小括弧,直接写参数
public class Test15 { int x = 3; int y = 4; public static void aoo(Aoo aoo){ int z =aoo.f(3,4); System.out.println(z); } public static void boo(Boo boo){ int z =boo.g(3); System.out.println(z); } public static void main(String[] args){ aoo(new Aoo() { //匿名内部类 @Override public int f(int x, int y) { return x*y; } }); aoo((x,y) -> { //使用lambda表达式 return x+y; }); aoo((x,y) -> x+y+1); //lambda表达式简写,如果花括弧里的表达式只有一个,可以不写花括弧,直接写表达式 boo(x -> x+3); //lambda表达式简写,如果接口的参数只有一个,就可以省略小括弧,直接写参数 } } interface Aoo{ int f(int x,int y); } interface Boo{ int g(int x); }
五、tips小技巧
使用IntelliJ IDEA这个工具写lambda表达式,如果写的正确,会出现特有标志: