一,lambda表达式
lambda表达式可以用非常少的代码实现抽象方法。lambda表达式不能独立执行,因此必须实现函数式接口,并且会返回一个函数式接口的对象。lambda表达式的语法非常特殊。格式如下:
() -> 结果表达式
参数 -> 结果表达式
(参数 1,参数 2,.....参数n)->结果表达式
lambda表达式语法用如下方式理解:
() -> {代码块}
这个方法 按照 这样的代码来实现
二,lambda表达式实现函数式接口
1.
2.
3.
三,方法的引用
引用成员方法的语法如下:
对象名::成员方法名
与引用静态方法语法不同,这里操作符左侧的必须是一个对象名,而不是类名。
4.
创建函数式接口和测试类,在接口中定义抽象方法method(),在测试类中编写一个可以用来实现抽象方法的成员方法——format()方法
引用构造方法
引用构造方法的语法如下:
类名::new
因为构造方法与类名相同,如果操作符左右都写类名,会让操作符误以为是在引用与类名相同的静态方法,这样会导致程序出现BUG,所有引用构造方法的语法使用了new关键字。操作符右侧的写new关键字,表示引用构造方法。
5.
四,流处理
流处理有点类似数据库的SQL语句,可以执行非常复杂的过滤、映射、查找和收集功能,并且代码量很少。唯一缺点是代码可读性不高,如果开发者基础不好,可能会看不懂API所表达的含义。
6.
7.
其中stream = stream.limit(3);为限制输出的条数
数据映射
数据的映射和过滤概念不同:过滤式在流中找到符合条件的元素,映射是在流中获得具体的数据。
数据查找
数据查找并不是在流中获取数据(这属于数据过滤),而是判断流中是否符合条件的数据,查找的结果是一个boolean值或一个Optional类的对象。
数据收集
数据收集可以理解为高级的“数据过滤+数据映射”,是对数据的深加工。本节将讲解两种实用场景:数据统计和数据分组。