Lambda表达式

2018-11-10  本文已影响0人  升空的焰火

一、简介

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

上一篇下一篇

猜你喜欢

热点阅读