优点:使代码更简洁,可读性更高
主要关注点:函数
-
Lambda表达式
(优化某些只有一个方法的匿名内部类:alt+回车,快捷键直接替换)
函数式编程的具体体现
不关注对象,而关注参数和方法体
原则:可推导可省略
用法:()->{},创建线程时可用
省略规则:
参数类型可以省略
方法体只有一句代码时大括号return和唯一一句代码的分号可以省略
方法只有一个参数时小括号可以省略 -
Stream流
区别IO流,此处Stream流是对集合进行操作
常用操作:-
创建流
把list集合转化为流 .stream()
把数组转化为流 Array.stream(arr) 或 Stream.of(arr)
把map集合转化为流 .entrySet() -
中间操作 .filter,符合条件的对象才能留在流中
.map() 转换类型
.distinct() 去重操作,需要重写equals方法
.sort() 排序,空参时需要实现compare接口
.limit() 设置流长度,超出被抛弃
.skip(n) 跳过n个元素
.flatMap() 把一个对象转化为多个对象放到流中
-
终结操作 .foreach() 遍历
.count() 计数
.max() 最大
.min() 最小
.collect() 将当前流转换为集合,使用工具类Collectors
.anyMatch() 任何一个满足条件
.allMatch() 所有都要满足条件
,noneMatch() 所有都不满足条件
.findAny() 获取任意一个元素
.findFirst() 获取第一个元素
.reduce() 归并(缩减操作)
-
-
Optional对象
避免空指针异常
使用ofNullable创建Optional对象
orElseGet() 安全获取值
orElseThrow() 抛出异常
filter() 过滤方法
isPresent() 是否存在数据
map() 对数据进行转换 -
函数式接口
只有一个抽象方法的接口
常用函数式接口:
Consumer 消费接口
Function 计算转换接口
Predicate 判断接口
Supplier 生产型接口
常用函数接口默认方法:
Predicate -> .and .or
negate 取反 -
方法引用
方法体中国只有一个方法,进一步简化
基本格式:类名或者对象名::方法名
推荐用法:lambda唯一一行代码是方法调用
语法详解:
类的静态方法 类名::方法名
对象的实例方法 对象名::方法名  引用类的实例方法 类名::方法名 
构造器引用 类名::new