Java8新特性——Lambda表达式

145 阅读1分钟

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对象。