1.Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。
带有参数变量的表达式,是一段可以传递的代码,可以被一次或多次执行
是一种精简的字面写法,其实就是把匿名内部类中“一定”要做的工作省略掉
然后由JVM通过推导把简化的表达式还原
格式: (parameters参数) -> expression表达式或方法体
paramaters:
类似方法中的形参列表,这里的参数是函数式接口里的参数
->:可理解为“被用于”的意思
方法体:
可以是表达式也可以代码块,是函数式接口里方法的实现
如果负责运算的代码无法用表达式表示,可以使用编写方法实现
但必须用{}包围并按需明确使用 return语句
需求:对字符串数组按字符串长度排序
(1).Lambda的优点
a.极大的减少代码冗余,同时可读性也好过冗长的匿名内部类
b.与集合类批处理操作结合,实现内部迭代,并充分利用现代多核CPU进行并行计算。之前集合类的迭代都是外部的,即客户代码。而内部迭代意味着由Java类库来进行迭代,而不是客户代码
(2).和匿名内部类的区别
a.在lambda中,this不是指向lambda表达式产生的那个对象,而是它的外部对象
b.Java 编译器编译 Lambda 表达式并将他们转化为类里面的私有函数,它使用 Java 7 中新加的 invokedynamic 指令动态绑定该方法,但每一个匿名内部类编译器会为其创建一个类文件
2.方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
2.函数式接口分类
3.Stream流
Stream概述
是用函数式编程方式在集合类上进行复杂操作的工具,更像一个高级版本的 Iterator
原始版本的 Iterator,用户只能显式地一个一个遍历元素并对其执行某些操作
高级版本的 Stream,用户只要给出需要对其包含的元素执行什么操作
Stream 会隐式地在内部进行遍历,做出相应的数据转换
而和迭代器又不同的是,Stream 可以并行化操作
借助于 Lambda 表达式,极大的提高编程效率和程序可读性