函数式编程思想
面向对象的思想:做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情
函数式编程思想:只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程
Lambda 表达式
▶ 体验Lambda的更优写法
编辑
输出:
编辑
▶ Lambda 标准格式
Lambda标准格式由三部分组成:
一些参数 、一个箭头 、一段代码
格式: (参数列表)-> { 一些重写方法的代码 };
解释说明格式: ()--- 接口中抽象方法的参数列表,没有参数就空着,有参数就写出参数,多个参数使用逗号分隔
-> --- 传递的意思,把参数传递给方法体
{ } --- 重写接口的抽象方法的方法体
▶ 练习:使用Lambda标准格式(无参无返回)
题目:给定一个厨子‘ Cook ’接口,内含唯一的抽象方法 makeFood ,且无参数,无返回值,如下
public interface Cook { void makeFood() ; }
在下面的代码中,使用Lambda的标准格式调用invokeCook方法,打印输出 “ 吃饭啦!” 字样
public class Demo03 { public static void main(String[] args) { // 在这里使用lambda的标准格式调用invokeCook方法 } private static void invokeCook(Cook cook) { cook.makeFood(); } }
解答:
编辑
编辑
▶ Lambda 的参数和返回值
需求: 使用数组存储多个Person对象,对数组中的Person对象使用Arrays的sort方法通过年龄进行升序排序
编辑
▶ 练习:使用Lambda标准格式(有参有返回)
题目:给定一个计算器Calculator接口,内含抽象方法calc,可以将两个int数字相加得到和值
编辑
▶ Lambda省略格式
Lambda表达式是可推导,可以省略 --- 凡是根据上下文推导出来的内容,都可以省略书写
可以省略的内容:
(1)(参数列表):括号中参数列表的数据类型可以省略不写
(2)(参数列表):括号中的参数如果只有一个,那么类型和()都可以省略
(3)(一些代码):如果{ }中的代码只有一行,无论是否有返回值,都可以省略({ } ,return ,分号)
注意:要省略 { } ,return ,分号必须一起省略
▶ Lambda的使用前提
Lambda的语法非常简洁,完全没有面向对象复杂的束缚,但是使用的时候需要注意:
(1)使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法
无论是JDK内置的Runnable、Comparator接口还是自定义的接口,只有当接口中的抽象方法存在且唯一时,才可以使用Lambda
(2)使用Lambda必须具有上下文推断
也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lamda作为该接口的实例
备注:有且仅有一个抽象方法的接口,称为 “ 函数式接口 ”