1、Lambda表达式的语法
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型
2、如何使用Lambda表达式
仍以筛选年龄大于30的Person对象为例:
2.1、为Lambda表达式定义函数式接口
@FunctionalInterface
interface FilterProcessor<T>{
boolean process(T t);
}
PS:该接口只能有一个抽象函数!接下来Lambda表达式就是该抽象函数的实现。 PS:在为Lambda表达式定义函数式接口时,需要加上注解@FunctionalInterface,这样当该接口中抽象函数个数不是1时就会报错提示。
2.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表达式。
2.3、传递Lambda表达式
List<Person> result = filter(list, (Person p)->p.getAge()>30);
直接将Lambda表达式作为参数传递给filter的函数式接口即可,从而在result中就能获取年龄超过30岁的Person对象。