java1.8的新特性

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类型的结果的方法的抽象

    通过调用apply方法执行内容


b.消费型接口:Consumer

对应的方法类型为接收一个参数,没有返回值

一般来说使用Consumer接口往往伴随着一些期望状态的改变

或者事件的发生,典型的forEach就是使用的Consumer接口

虽然没有任何的返回值,但是向控制台输出结果

Consumer 使用accept对参数执行行为

c.供给型接口:Supplier

无传入参数,有返回值

该接口对应的方法类型不接受参数,但是提供一个返回值

使用get()方法获得这个返回值

d.断言型接口:Predicate

有传入参数,有返回值Boolean

该接口对应的方法为接收一个参数,返回一个Boolean类型值

多用于判断与过滤,使用test()方法执行这段行为

你可能感兴趣的:(java8的新特性)