Lambda表达式
前言
Lambda (λ)希腊字母表的第11个字母
读音:lan b(m) da(兰亩达)['læ;mdə])
基于数学中的λ演算而得名lambda表达式
一、Lambda简介
java的Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
函数里式接口时学习lambda表达式的关键所在。
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
其实质属于函数式编程的概念。
二、Lambda表达式的优点
避免内部类定义过多。
可以让你的代码看起来很简洁
去掉了一些没有意义的代码,只留下了核心的逻辑
既然lambda有这么多的好处 那就不要这些有的没的,直接上代码
三、Lambd表达式的推导过程
1.实现类方式
代码如下(示例):
public class LambdaExpression {
public static void main(String[] args) {
HelloImpl hello = new HelloImpl();
hello.say();
}
}
interface Hello {
void say();
}
//实现类
class HelloImpl implements Hello {
public void say() {
System.out.println("hello");
}
}
2.静态内部类
代码如下(示例):
public class LambdaExpression {
//静态内部类
static class HelloImpl implements Hello {
public void say() {
System.out.println("hello");
}
}
public static void main(String[] args) {
HelloImpl hello = new HelloImpl();
hello.say();
}
}
interface Hello {
void say();
}
3.局部内部类
代码如下(示例):
public class LambdaExpression {
public static void main(String[] args) {
//局部内部类
class HelloImpl implements Hello {
public void say() {
System.out.println("hello");
}
}
HelloImpl hello = new HelloImpl();
hello.say();
}
}
interface Hello {
void say();
}
4.匿名内部类
代码如下(示例):
public class LambdaExpression {
public static void main(String[] args) {
//匿名内部类
Hello hello = new Hello() {
public void say() {
System.out.println("hello");
}
};
}
}
interface Hello {
void say();
}
5.Lambda表达式
接口中值存在一个方法,所以实现类必须实现该方法,所以参照以上的匿名内部类其中new部分以及方法名都是多余的代码 所以省略,就有了以下代码(示例):
public class LambdaExpression {
public static void main(String[] args) {
Hello hello = ()->{
System.out.println("hello");
};
}
}
interface Hello {
void say();
}
6.Lambda表达式进一步的精简(参数类型)
如果方法存在参数,再编写lambda表达式可以省略参数的类型,代码如下(示例):
public class LambdaExpression {
public static void main(String[] args) {
//精简了参数类型
Hello hello = (name)->{
System.out.println(name + "say hello");
};
}
}
interface Hello {
void say(String name);
}
7.Lambda表达式进一步的精简(括号)
如果方法存在参数,再编写lambda表达式可以省略参数的类型,代码如下(示例):
public class LambdaExpression {
public static void main(String[] args) {
//精简了小括号 参数类型
Hello hello = name -> {
System.out.println(name + " say hello");
};
hello.say("macrocsom");
}
}
interface Hello {
void say(String name);
}
8.Lambda表达式进一步的精简(花括号)
如果方法存在参数,再编写lambda表达式可以省略参数的类型,代码如下(示例):
public class LambdaExpression {
public static void main(String[] args) {
//精简了参数类型,小括号,花括号
Hello hello = name -> System.out.println(name + " say hello");
hello.say("macrocsom");
}
}
interface Hello {
void say(String name);
}
四、注意事项
- lambda表达式只有一行的时候才能简化成最精简的模式,如果有多行,就要使用代码块
- 接口为函数式接口
- 去掉括号的精简方式只能为一个参数
- 多个参数也可以去掉参数类型,要去掉都去掉
五、写在最后
一个正在学习的程序猿,有什么错误的地方欢迎大家指正
为了诗和远方的门票,努力