Java Lambda表达式

Java Lambda表达式

 

Lambda是什么

在JDK 1.8  版本中新增了Lambda表达式

作用:简化匿名内部类

使用前提:必须是函数式接口

函数式接口:只有一个必须被重写的抽象方法的接口

强制检测是否为函数式接口,注解@FunctionalInterface

 

语法

    ()->{}  
()  匹配要重写的抽象方法的参数列表
->  Lambda符号箭头具有上下文推导的作用
{}  匹配要重写的抽象方法的方法体

 

匿名内部类

在讲解Lambda表达式之前先写一个匿名内部类的,好在接下来对它进行改写

public class Demo01 {
public static void main(String[] args) {

new MyInterface() {
@Override
public void mehtod() {
System.out.println("我是匿名内部类");
}
}.mehtod();
}
}

interface MyInterface {
void mehtod();
}

 

Lambda表达式

用法1

首先对上面的匿名内部类使用Lambda表达式进行改写

public class Demo01 {
public static void main(String[] args) {

MyInterface m = () -> {
System.out.println("我是Lambda表达式");
};
m.mehtod();
}
}

@FunctionalInterface
interface MyInterface {
void mehtod();
}

用法2 

方法体中如果方法语句只有一句,方法体前后的 {} 可以省略

public class Demo01 {
public static void main(String[] args) {

MyInterface m = () -> System.out.println("我是Lambda表达式");
m.mehtod();
}
}

@FunctionalInterface
interface MyInterface {
void mehtod();
}

用法3

如果有参数,参数的数据类型可以省略

箭头有上下文推导的作用,可以根据上下文,寻找到所需要的参数类型

public class Demo01 {
public static void main(String[] args) {

MyInterface m = (a,b) -> System.out.println("我是Lambda表达式"+a+b);
m.mehtod();
}
}

@FunctionalInterface
interface MyInterface {
void mehtod(int a,int b);
}

用法4

如果有参数且只有一个,前后的()可以省略

public class Demo01 {
public static void main(String[] args) {

MyInterface m = a -> System.out.println("我是Lambda表达式"+a);
m.mehtod();
}
}

@FunctionalInterface
interface MyInterface {
void mehtod(int a);
}

用法5

如果语句体只有一句,并且还是return 语句, return关键字及前后的{}可以一起省略

public class Demo01 {
public static void main(String[] args) {

MyInterface m = () -> "我是Lambda表达式";
System.out.println(m.mehtod());
}
}

@FunctionalInterface
interface MyInterface {
String mehtod();
}
posted @ 2020-07-06 22:14  CHOI_Hello  阅读(110)  评论(0编辑  收藏  举报