持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
Lambda表达式是Java8中的新特性,来源于数学中的λ演算,是一套关于函数定义,输入量,输出量的计算方案。编码时,我们一般尽可能轻量级的将代码封装为数据,可以解决传统方法通过接口和实现类(匿名内部类)实现的语法冗余,this关键字,变量捕捉,数据控制等问题。
1 传统方法
1.1 传统方法-子类实现接口
首先,我们有一个接口
public interface Factory {
Object getObject();
}
复制代码
还有一个简单的对象User
:
public class User {
private String name;
private int age;
//省略构造方法及get set
}
复制代码
类SubClass
继承了这个接口
public class SubClass implements Factory{
@Override
public Object getObject() {
return new User();
}
}
复制代码
当我们想调用这个方法的时候:
Factory factory = new SubClass();
User user1 = (User) factory.getObject();
System.out.println(user1);
复制代码
1.2 传统方法-匿名内部类
当使用匿名内部类的时候:
factory = new Factory() {
@Override
public Object getObject() {
return new User("Luke",12);
}
};
User user2 = (User) factory.getObject();
System.out.println(user2);
复制代码
2 Labda表达式
2.1 基本形式
将匿名内部类的内部方法提出来,前边加一个()->
factory = () ->{
return new User("Luke",12);
};
User user3 = (User) factory.getObject();
System.out.println(user3);
复制代码
2.2 先小结一哈
Lambda其实就是一个函数
它使得代码变得简洁和紧凑
并且这里可以引入一个概念叫函数式编程
扫描二维码关注公众号,回复:
14244410 查看本文章
- Lambda表达式可以赋值给变量
- Lambda表达式可以作为参数进行传递
- Lambda表达式可以作为返回值
3 Lambda的语法格式
3.1 执行语句
(parameters)-> {statements;}
parameters
: 函数的参数列表statements
:执行语句->
:使用指定的参数完成某个功能
(int a, int b)->{return a+b;}
复制代码
3.2 表达式
(parameters)-> expression
parameters
: 函数的参数列表expression
: 表达式->
:使用指定的参数完成某个功能
(int a, int b) -> a+b
复制代码
4 Lambda的语法格式
4.1 可选的大括号
函数体只包含一个语句,则不需要大括号
(String str) -> System.out.println(str);
复制代码
4.2 可选的参数圆括号
只有一个参数的时候可以省略圆括号和类型
str -> System.out.println(str);
复制代码
4.3 可选的返回关键字return
函数体只有一个表达式,且运算结果匹配返回类型
(int a, int b) -> a+b
复制代码
4.4 可选的声明类型
不需要参数类型,编译器可以根据参数值进行推断
(a, b) -> a+b
复制代码
5 使用Lambda的前提
必须有一个函数式接口
那么什么是函数式接口呢?
有且只有一个抽象方法的接口称之为函数式接口。