函数式接口
什么是函数式接口
只包含一个抽象方法的接口,称为函数式接口
可以通过Lambda创建该接口的对象
以前用匿名实现类表示的都可以使用Lambda表达式来写
Lambda表达式
Lambda就是将以前我们写的匿名实现类简化了,下面我通过几段递进的代码演示Lambda的简化过程
匿名实现类写法
@Test
public void test() {
Runnable run = new Runnable() {
@Override
public void run() {
System.out.println("以前的写法");
}
};
}
这段代码用Lambda表达式来写
@Test
public void test() {
Runnable r = () -> {
System.out.println("无参,无返回值");
};
r.run();
}
这样还是不够简单,我们继续看其他的几种写法
有一个参数,没有返回值
Consumer<String> c2 = (String s) -> {
System.out.println(s);
};
数据类型也可以省略
Consumer<String> c2 = (s) -> {
System.out.println(s);
};
如果只有一个参数,小括号也可以省略
Consumer<String> c2 = s -> {
System.out.println(s);
};
有多个参数,多条执行语句,并且有返回值
Comparator<Integer> c2 = (o1, o2) -> {
System.out.println(o1);
System.out.println(o2);
return o1.compareTo(o2);
};
方法体只有一条语句时,return 和 大括号都可以省略
Comparator<Integer> c = (o1, o2) -> o1.compareTo(o2);
总结
只有函数式接口可以使用Lambda表达式,函数式接口就是只有一个抽象方法的接口
Lambda表达式的左边:如果只有一个参数,小括号可以省略,参数类型可以考虑省略
右边:正常情况下应该有一对大括号,但是如果只有一条执行语句,return和大括号都可以省略