1函数式编程思想概述
在数学中,函数就是有输入量、输出量的一套计算方案,也就是”拿什么东西做什么事情”。相对而言,面向对象过
分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法一-强调做什么 ,而不是以
什么形式做。
面向对象的思想:
做一件事情,找一一个能解决这个事情的对象调用对象的方法,完成事情.
函数式编程思想:
只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程
2编程思想的转换
做什么,而不是怎么做
我们真的希望创建一个匿名内部类对象吗 ?不。我们只是为了做这件事情而不得不创建一个对象。 我们真正希望做
的事情是:将run方法体内的代码传递给Thread类知晓。
传递一段代码.这才是我们真正的目的。 而创建对象只是受限于面向对象语法而不得不采取的一种手段方式。
那,有没有更加简单的办法?如果我们将关注点从“怎么做”回归到“做什么”的本质上,就会发现只要能够更好地达
到目的,过程与形式其实并不重要。
2014年3月Oracle所发布的Java8(JDK 1.8)中,加入了Lambda表达式的重量级新特性,为我们打开了新世界的大门。
3体验Lambda的更优写法
4.Lambda标准格式
Lambda表达式的标准格式:
由三部分组成:
a.一些参数
b.一个箭头
C.一段代码
格式:
(参数列表) -> {一 些重写方法的代码};
解释说明格式:
():接口中抽象方法的参数列表,没有参数,就空着;有参数就写出参数,多个参数使用逗号分隔
-> :传递的意思,把参数传递给方法体{}
{}:重写接口的抽象方法的方法体
5.Lambda表达式简化
Lambda表达式:是可推导,可以省略
凡是根据,上下文推导出来的内容,都可以省略书写
可以省略的内容:
1. (参数列表):括号中参数列表的数据类型,可以省略不写
2. (参数列表):括号中的参数如果只有一-个,那么类型和( )都可以省略
3.{一些代码}:如果{}中的代码只有一行, 无论是否有返回值,都可以省略({},return,分号)
注意:要省略{}, return,分号必须- -起省略
Lambda的语法非常简洁,完全没有面向对象复杂的束缚。但是使用时有几个问题需要特别注意:
1.使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。
无论是JDK内置的Rynnable、Comparator 接口还是自定义的接口,只有当接口中的抽象方法存在且唯一时,
才可以使用Lambda。
2.使用Lambda必须具有,上下文推断。
也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。
备注:有且仅有一一个抽象方法的接口,称为“函数式接口"”。