1.新特性包含:
a.随着大数据的兴起,函数式编程在处理大数据上的优势开始体现,引入了Lambada函数式编程
b.使用Stream彻底改变了集合使用方式:只关注结果,不关心过程
c.新的客户端图形化工具界面库:JavaFX
d.良好设计的日期/时间API
e.增强的并发/并行API
f.Java与JS交互引擎 -nashorn
g.其他特性
2.什么是Lambada
带有参数变量的表达式,是一段可以传递的代码,可以被一次或多次执行,可以很大的简化代码的冗余,其实就是把匿名内部类中“一定”要做的工作省略掉,然后由JVM通过推导把简化的表达式还原
优点:极大的简化代码的冗余,同时代码的可读性也很好,
与集合类批处理操作结合,实现内部迭代,并充分利用现代多核CPU进行并行计算。之前集合类的迭代都是外部的,即客户代码。而内部迭代意味着由Java类库来进行迭代,而不是客户代码
7.和匿名内部类的区别
a.在lambda中,this不是指向lambda表达式产生的对象,而是它的外部对象
b.Java 编译器编译 Lambda 表达式并将他们转化为类里面的私有函数,它使用 Java 7 中新加的 invokedynamic 指令动态绑定该方法,但每一个匿名内部类编译器会为其创建一个类文件
方法体:
可以是表达式也可以代码块,是函数式接口里方法的实现
如果负责运算的代码无法用表达式表示,可以使用编写方法实现
但必须用{}包围并按需明确使用 return语句
需求:对字符串数组按字符串长度排序
3.Lambada何时使用
需要显示创建函数式接口对象的地方,都可以使用
实际上函数式接口的转换是Lambda表达式唯一能做的事情
即lambda必须和Functional Interface配套使用
主要用于替换以前广泛使用的内部匿名类,各种回调
比如事件响应器、传入Thread类的Runnable等
4.公共定义的函数式接口
核心的有四个接口:
a.功能性接口:Function<T, R>
有输入参数,有返回值
是对接收一个T类型参数,返回R类型的结果的方法的抽象
通过调用apply方法执行内容
b.消费型接口:Consumer<T>
对应的方法类型为接收一个参数,没有返回值
一般来说使用Consumer接口往往伴随着一些期望状态的改变
或者事件的发生,典型的forEach就是使用的Consumer接口
虽然没有任何的返回值,但是向控制台输出结果
Consumer 使用accept对参数执行行为
c.供给型接口:Supplier<T>
无传入参数,有返回值
该接口对应的方法类型不接受参数,但是提供一个返回值
使用get()方法获得这个返回值
d.断言型接口:Predicate<T>
有传入参数,有返回值Boolean
该接口对应的方法为接收一个参数,返回一个Boolean类型值
多用于判断与过滤,使用test()方法执行这段行为