14.1 lambda 表达式
14.1.1 lambda表达式简介
有非常少的代码实现抽象方法
14.1.2 lambda表达式实现函数式接口
例子:使用lambda表达式实现打招呼接口
例子:使用lambda表达式做加法计算
例子:使用lambda表达式为考试成绩分类
14.1.3 lambda表达式调用外部变量
lambda 表达式除了可以调用定义好的参数,还可以调用表达式以外的变量。
1.lambda表达式无法更改局部变量
使用lambda表达式修改局部变量【代码是错的】
例子:
.lambda表达式可以更改类成员变量
使用lambda表达式修改类成员变量
例子:
14.1.4 ambda 表达式与异常处理
用多接口的抽象方法为了保证程序的安全性,会在定义时就抛出异常。
使用lambda表达式实现防沉迷接口
例子:
14.2 方法的引用
1.引用静态方法
语法如下:
类名::静态方法名
例子:
2.引用成员方法
、语法如下:
对象名,成员方法名
例子:
3.引用带泛型的方法
泛型是Java 开发经常使用到的功能,“.:”操作符支持引用带泛型的方法。除方法外,“.:”操作也支持引用带泛型的类。
例子:
4.引用构造方法
1.引用无参构造方法
语法:
类名::new
例子:
2.引用有参构造方法
引用有参构造方法的语法与引用无参构造方法一样。区别就是函数式接口的抽象方法是有参数的。
3.引用数组构造方法
5 Fuction 接口
在此之前的所有实例中,想要使用 ambda 表达式都需要先创建或调用已有的函数式接口14.2.5 Fuction 接口java.until.function 何己经摄供很多预定义函数式接口,就是没有实现任何功能,仅用来封装lambda达式的对象。
Function 接口方法
结果:
192.168.1.1
14.3 流处理
例子:
1.Stream接口简介
流处理的接口都定义在 java.uil.stream 包下。BaseStream 接口是最基础的接口,但最常用的BaseStream接口的一个子接口——Stream接口,基本上绝大多数的流处理都是在Stream接口上实现的。
表14.3Stream接口的常用方法
Collection 接口新增两个可以获取流对象的方法。第一个方法最常用,可以获取集合的顺序流,方法如下:
Stream<E> stream();
第二个方法可以获取集合的并行流,方法如下:
Stream<E> parallelstream();
因为所有集合类都是 Collection 接口的子类,如 ArrayList 类、HashSet 类等,所以这些类都可以进行流处理。例如:
List<lnteger> list = new ArrayList<lnteger>();
Stream<lnteger> s = list.stream();
2. Optional类
例子:
3.Collectors 类
4.数据过滤
1.filter()方法
filter0方法是 Stream接口提供的过滤方法。该方法可以将lambda表达式作为参数然后按照lambi表达式的逻辑过滤流中的元素。
2.distinct()方法
3.linit()方法
4.skip()方法
5.数据映射
数据的映射和过滤概念不同:过滤是在流中找到符合条件的元素,映射是在流中获得具体的数据。
结果:
老马
小刘
6.数据查询
1.allMatch()方法
allMatch0方法是 Stream 接口提供的方法,该方法会判断流中的元素是否全部符合某一条件,返回结果是 boolean 值。
7.数据收集
1.数据统计
2.数据分组
数据分组就是将流中元素按照指定的条件分开保存,类似 SQL 语言中的“GROUPBY”关键字