Lambda表达式
一、简介
1.在java8之前,实现程序的可扩展性,我们常用匿名内部类传递。
2.属于策略模式。
3.函数式编程。
二、语法
Lambda表达式用于表示一个函数,所以它和函数一样,也拥有参数、返回值、函数体,但它没有函数名,所以Lambda表达式相当于一个匿名函数。语法如下:
(Person person)—>person.getAge()>30
Lambda表达式用—>连接,->左侧为函数的参数,->右侧为函数体。
若右侧由多条语句构成则需要用{}包裹,如:
(Person person)—>{person.getAge()>30;System.out.println(person.getName());}
Lambda表达式无需显示指定返回值类型,JVM会根据->右侧语句的返回结果自动判断返回值类型,如:
(Person person)—>person.getAge()>30 #自动判断返回值为boolean型
三、如何使用lambda
1.为Lambda表达式定义函数式接口
@FunctionalInterfaceinterface FilterProcessor<T>{
boolean process(T t);
}
PS:该接口只能有一个抽象函数!接下来Lambda表达式就是该抽象函数的实现。
PS:在为Lambda表达式定义函数式接口时,需要加上注解@FunctionalInterface,这样当该接口中抽象函数个数不是1时就会报错提示。
2.实现筛选函数
List<T> filter(List<T> list, FilterProcessor<T> filterProcessor){
List<T> result = new ArrayList<T>();
if(filterProcessor.process(t))
result.add(t);
return result;
}
filter函数接收一个函数式接口,该参数用于接收一个Lambda表达式。
3.传递Lambda表达式
List<Person> result = filter(list, (Person p)->p.getAge()>30);
直接将Lambda表达式作为参数传递给filter的函数式接口即可,从而在result中就能获取年龄超过30岁的Person对象。