1.0 Lambda表达式
Lambda表达式的标准格式为:格式说明:
- 小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
- ->是新引入的语法格式,代表指向动作。
- 大括号内的语法与传统方法体要求基本一致。
在Lambda标准格式的基础上,使用省略写法的规则为:
- 小括号内参数的类型可以省略;
- 如果小括号内有且仅有一个参,则小括号可以省略;
- 如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。
1.1 函数式的概念
函数式接口在java中是指:有且仅有一个抽象方法的接口,适用于函数式编程的接口,在Java中体现就是Lambda,所以函数式接口就是
可以适用于Lambda使用的接口。
四个常用的接口
supplier 生产型接口 get
consumer 消费型接口 accept andThen
precidate判断型接口 test and or negate
function转换型接口 apply andThen
2.1Stream流
流的获取
所有collection类型集合可以通过stream()方法获取流
Stream接口的静态of方法,方法参数为可变参数,我们可以传递一个数组
常见方法
延迟方法:返回值仍然是流对象,并没有执行
终结方法:返回值不是流对象,执行,如 count和forEach
forEach:传入的是消费型接口
filter:传入的是判断型接口
map:传入的转换型接口
注意:流只能使用一次,例如调用fifter生成下一个流后,本流关闭,不能第二次调用
count:返回值long类型,统计个数(终结方法)
limit:只取前几个
skip:只取后几个
concat:将两个流拼接为一个流(Stream静态方法)
3.1方法引用
如果lambda要表达的方案已存在可以通过::来引用
使用对象名引用成员方法 System.out::print 输出
通过类名引用静态方法Math::abs 简单改造
通过super引用父类的成员方法super::sayHello ()->super.sayHello() 父类方法
通过this引用本类的成员方法this::buyHouse ()->this.buyHouse() 子类方法
类的构造器引用Person::new 自动选择参数 创建对象
数组的构造器引用 int[]::new 自动选择参数 创建数组