lambda表达式是干什么的? 实现接口,快速拿到接口的对象
长什么样? new TestLambda().studentSayHello( ()-> System.out.println("hello") );
或者这样
Student student = TestLambda::hello;
对接口有什么要求? 接口只能有一个待实现的方法
静态或者default方法可以有很多,它们不需要被实现
自定义并使用lambda表达式 //1.只有一个普通方法 的 接口
interface Student{
void sayHello();
}
public class TestLambda{
//2.有一个 以接口作为参数的方法
void studentSayHello(Student student){
student.sayHello();
}
public static void main(String[] args) {
//3.调用方法,括号里面的就是lambda表达式
// 基本形式是 ()->{}
// 小括号里面的是接口里面方法的参数 大括号里面的是具体语句
//当方法参数 或者 语句只有一条时 括号可以省略
new TestLambda().studentSayHello( ()-> System.out.println("hello") );
}
}
把某个构造方法充当未实现方法体 无论哪个类的构造方法都行
注意返回值与方法参数要一样
//1.只有一个普通方法 的 接口
interface Student{
void sayHello();
}
public class TestLambda{
//2.这个构造方法 和上面那个接口的方法 返回值和参数都一样,
// 接下来我要用这个 构造方法去实现上面那个接口
TestLambda(){
System.out.println("hellow");
}
public static void main(String[] args) {
//3.用构造方法的方法体去实现接口
Student student = TestLambda::new;
student.sayHello();
}
}
用静态方法充当未实现的方法体 注意方法参数与返回值要一样
//1.只有一个普通方法 的 接口
interface Student{
void sayHello();
}
public class TestLambda{
//2.这个静态方法 和上面那个接口的方法 返回值和参数都一样,
// 接下来我要用这个 静态方法去实现上面那个接口
static void hello(){
System.out.println("hellow");
}
public static void main(String[] args) {
//3.用静态方法的方法体去实现接口
Student student = TestLambda::hello;
student.sayHello();
}
}
使用lambda表达式一些情形
//1.在list map set 的forEach方法中
List list = new ArrayList();
list.add("aa");
list.add("bb");
list.add("cc");
list.forEach((item)-> System.out.println(item));
//2.在用runnable接口创建线程中,这里创建了一个线程并启动
new Thread(()-> System.out.println("快速实现runnable接口")).start();