一.快速入门
匿名内部类中重写run()方法分析:
方法形式参数为空,说明调用方法时不需要调用参数
方法返回值类型为void,说明方法执行没有结果返回
方法体中的内容没事我们具体要做的事情
Lambda表达式分析:
():里面没有内容,可以看成是方法形式参数为空
->:用箭头指向后面要做的事
{}:包含一段代码,我们称之为代码块,可以看成是方法体中的内容
Lambda表达式格式:
格式:(形式参数)-> {代码块}
形式参数:如果有多个参数,参数之间用逗号隔开,如果没有参数,留空即可
->:固定写法,代表指向动作
{代码块}:是我们具体要做的事情,也就是以前我们写的方法体内容
Lambda使用前提:
需要有一个接口
接口中有且仅有一个抽象方法
package com.guguo.test.lambda;
public class quick {
public static void main(String[] args) {
//匿名内部类的方式实现多线程
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("多线程程序启动了");
}
}).start();
//lambda的方式实现多线程
new Thread(
() -> {
System.out.println("多线程程序2启动了");
}
).start();
}
}
二.不同方式实现
1.无参数无返回值
//接口
package com.guguo.test.lambda;
public interface Eatable {
void eat();
}
//测试
package com.guguo.test.lambda;
public class EatableDemo {
public static void main(String[] args) {
EatableDemo.useEatable(()->{
System.out.println("好累呀,好想睡觉");
});
}
public static void useEatable(Eatable e){
e.eat();
}
}
2.带参无返回值
//接口
package com.guguo.test.lambda;
public interface Flyable {
void fly(String s);
}
//测试
package com.guguo.test.lambda;
public class FlyableDemo {
public static void main(String[] args) {
FlyableDemo.useFlyable((String s)->{
System.out.println(s);
System.out.println("摔死你个瘪犊子玩意");
});
}
public static void useFlyable(Flyable f){
f.fly("我要飞,我要飞");
}
}
3.带参有返回值
//接口
package com.guguo.test.lambda;
public interface Addable {
int add(int x,int y);
}
//测试
package com.guguo.test.lambda;
public class AddableDemo {
public static void main(String[] args) {
AddableDemo.useAddable((int x,int y)->{
return x+y;
});
}
public static void useAddable(Addable a){
int num= a.add(2,3);
System.out.println(num);
}
}
三.省略方式
1.参数的类型可以省略,但是多个参数情况下不能只省略一个
2.如果参数只有一个,那么小括号可以省略
3.如果代码块的语句只有一句,可以省略大括号和分号
4.如果代码块的语句只有一句,可以省略大括号和分号,如果有return ,return 也可以省略掉
//接口
package com.guguo.test.lambda;
public interface Addable {
int add(int x,int y);
}
//测试
package com.guguo.test.lambda;
public class AddableDemo {
public static void main(String[] args) {
// AddableDemo.useAddable((int x,int y)->{
// return x+y;
// });
AddableDemo.useAddable(
(x,y)-> x+y
);
}
public static void useAddable(Addable a){
int num= a.add(2,3);
System.out.println(num);
}
}