Lambda表达式
大约 2 分钟Java多线程详解
为什么要使用Lambda表达式
- 避免匿名内部类定义过多。
- 可以让代码看起来很简洁。
- 去掉了一堆没有意义的代码,只留下核心的逻辑。
其实质属于函数式编程的概念。
函数式接口的定义:任何接口,如果只包含唯一一个抽象方法,那么就是一个函数式接口。比如Runnable接口:
public interface Runnable {
public abstract void run();
}
对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。
lambda表达式的推导
1、接口 + 实现类
public class TestLambda1 {
public static void main(String[] args) {
ILike like = new Like();
like.lambda();
}
}
/** 定义一个函数式接口 **/
interface ILike{
void lambda();
}
/** 实现类 **/
class Like implements ILike{
@Override
public void lambda() {
System.out.println("i like lambda");
}
}
2、静态内部类
public class TestLambda1 {
/** 静态内部类 **/
static class Like implements ILike{
@Override
public void lambda() {
System.out.println("i like lambda");
}
}
public static void main(String[] args) {
ILike like = new Like();
like.lambda();
}
}
/** 定义一个函数式接口 **/
interface ILike{
void lambda();
}
3、局部内部类
public class TestLambda1 {
public static void main(String[] args) {
/** 局部内部类 **/
class Like implements ILike{
@Override
public void lambda() {
System.out.println("i like lambda");
}
}
ILike like = new Like();
like.lambda();
}
}
/** 定义一个函数式接口 **/
interface ILike{
4、匿名内部类
public class TestLambda1 {
public static void main(String[] args) {
/* 匿名内部类.没有类的名称,必须借助接口或者父类 */
ILike like = new ILike() {
@Override
public void lambda() {
System.out.println("i like lambda");
}
};
like.lambda();
}
}
/** 定义一个函数式接口 **/
interface ILike{
void lambda();
}
5、lambda表达式简化
public class TestLambda1 {
public static void main(String[] args) {
/* lambda表达式简化 */
ILike like = () -> {
System.out.println("i like lambda");
};
like.lambda();
}
}
/** 定义一个函数式接口 **/
interface ILike{
void lambda();
}
带参数的lambda表达式
public class TestLambda2 {
public static void main(String[] args) {
Ilove ilove = (int a) -> {
System.out.println("I love you===>" + a);
};
ilove.love(11);
// 简化1
ilove = (a) -> {
System.out.println("I love you===>" + a);
};
ilove.love(22);
// 简化2
ilove = a -> {
System.out.println("I love you===>" + a);
};
ilove.love(2233);
// 简化3
ilove = a -> System.out.println("I love you===>" + a);
ilove.love(666);
}
}
interface Ilove{
void love(int a);
}
总结
- lambda表达式只能有一行代码的情况下,才能去掉大括号,简化成一行。多行,使用代码块包括。
- lambda表达式前提是接口为函数式接口。
- 多个参数也可以去掉参数类型,要去掉都去掉。必须加括号。