面向过程是抽象解题步骤;面向对象是抽象问题域中的实体;函数式编程是将行为参数化。
行为参数化的含义是一段可以传递的代码。
lambda基础有三个点:
- 函数式接口
- lambda表达式
- 方法的引用
函数式接口
@FunctionnalInterface
只包含一个抽象方法的接口就叫做函数式接口。
FunctionalInterface (Java SE 15 & JDK 15) (oracle.com)
Conceptually, a functional interface has exactly one abstract method.
However, the compiler will treat any interface meeting the definition of a functional interface as a functional interface regardless of whether or not a
FunctionalInterface
annotation is present on the interface declaration.
lambda表达式
lambda表达式有两种基本结构:
- 表达式lambda:只包含的单个表达式的lambda,这种结构不需要显式return;
- 块lambda:入参指向的不再d是单个表达式,而是一个代码块,在块lambda中必须显式的return返回值;
基本语法:入参指向方法体
- 入参
- 如果参数可以被类型推导,那么就可以省略入参的类型
- 如果参数只有一个且可以被类型推导,那么还可以省略圆括号
- 如果没有参数,那么写成一个空的圆括号
- 方法体
- 如果只有一个表达式,那么可以省略大括号和return(表达式lambda)
- 如果有多个表达式,则必须写成代码块和显式的return返回值(块lambda)
方法的引用
- 静态方法:ClassName::staticMethod
- 实例方法:object::intanceMethod
- 构造函数:ClassName::new
更多lambda
了解lambda基础之后,你还需要进一步学习两个包:
- package java.utill.function:要在你的代码中使用lambda,你可能要定义很多函数式接口,不妨看看这个包,基本都为你定义好了,拿来直接用就行了;
- package java.util.stream:stream API的设计考虑到了lambda表达式,要想体验Java lambda的强大能力,就去使用并掌握stream包;
推荐书单:
- 基础:
- 《Java8编程官方参考教程》
- 《Java8函数式编程》
- 深入:
- 《函数式编程思想》
- 《Java8实战》