1 Lambda表达式
1.1 作用
- 为了简化匿名内部类的书写
1.2 思想
- 函数式编程思想 : 强调的是结果 , 而不强调过程
1.3 使用的前提
- Lambda表达式只能作用在函数式接口
函数式接口 : 只有一个抽象方法需要重写的接口 , @FunctionalInterface注解用来校验一个接口是否属于函数式接口
1.4 格式
一般格式 : () -> { }
- ( ) : 代表的接口中唯一抽象方法的形参,有就写,没有就空着
- -> : 用箭头指向后面后面要做的事情
- { } : 代码块,代表方法体的内容,要做的事情
1.5 简化规则
-
参数类型可以省略,但有多个参数的情况下,不能只省略一个,要省略都的省略
-
如果参数有且仅有一个,那么小括号可以省略
-
如果代码块的语句只有一条,可以省略大括号和分号,甚至是return,要省略全部都要省略不能省略某一个
举例 :
简化前 : (int a, int b) -> { return a+ b ;}
简化后 : (a , b) -> a+b
注意 : 三个条件满足哪个就可以简化哪个
2 Stream流
2.1 作用
- 对数组和集合中元素的筛选和过滤进行简化操作
2.2 获取Stream流
-
单列集合
- Collection接口中的默认方法Stream(),返回一个Stream流 (本质返回的Stream接口的实现类对象,底层实现)
-
双列集合
- 先通过双列集合的方法 keySet() 或 entrySet() 得到单列的键值Set集合或键值对Set集合,然后原理就同单列集合使用Stream流方式类同
-
数组
- Arrays 中的静态方法Stream(),返回一个Stream流
-
同类型多个数据
-Stream.of(T ... t )
2.3 中间方法 (方法的返回值都是Stream流对象,可以链式编程)
-
Stream filter(Predicate predicate )
作用 : 对流中的数据进行过滤,- Predicate 是一个函数式接口,可以用Lambda表达式, 其接口中的方法 : boolean test(T t) 对给定的参数进行判断,返回一个布尔值,true表示此元素留下了,false与之相反
-
Stream limit(long maxSize)
作用: 截取指定参数个数的数据- 截取Stream流中前 maxSize 个元素
-
Stream skip(long n)
作用 : 跳过指定参数个数的数据 -
static Stream concat(Stream a, Stream b)
作用 : 合并a和b两个流合成一个流 -
Stream map (Function<T , R> mapper)
作用 : 将流中的元素类型进行转换- Function<T , R> 是函数式接口
- 泛型T : 表示的流中的元素类型
- 泛型R : 表示的是把流中的元素转成的目标类型
-
Stream distinct()
作用 : 去除流中重复的元素,依赖(hashCode和equals方法) -
Stream sorted()
作用 : 将流中的元素按照自然排序的规则排序 -
Stream sorted(Comparator<? super T> comparator) 作用 : 将流中的元素按照自定义比较器的规则排序
2.4 终结方法
-
void forEach( Consumer action)
作用: 对此流的每个元素执行操作,一般用于遍历集合- Consumer 是函数式接口, 接口中唯一需要重写的抽象方法 void accept(T t)
- forEach方法会循环遍历拿到流中的每一个数据,在把每个数据传递给Lambda表达式的形参
- Lambda表达式 : (String s) -> { sout(s) }
-
long count()
作用 : 返回此流中的元素的个数
2.5 Stream流的收集操作
- 由于Stream流中无法直接修改集合,数组等数据源中的数据,所以需要对Stream流进行收集操作
- R collect(Collector collector) : 此方法只负责收集流中的数据,创建集合添加数据动作需要依赖于参数
- 工具类Collectors提供了具体的收集方式
- public static Collector toList():把元素收集到List集合中
- public static Collector toSet():把元素收集到Set集合中
- public static Collector toMap(Function keyMapper,Function valueMapper):把元素收集到Map集合中
3 Optional类
3.1 作用
- 是一个可以为null的容器对象, 只存在则isPresent()方法会返回true,主要用于进行非空判断,主要是一种对空值判断的规范
3.2 API
-
public static Optional ofNullable(T value)
作用 : 通过指定值构建一个Optional容器,如果值为null则返回Optional.empty 返回值为Optional对象,可以链式编程 -
public boolean isPresent()
作用 : 如果Optional中存储的对象为null返回的是false,如果对象不为null返回的是true
来源:https://www.cnblogs.com/epicenter/p/16322560.html
本站部分图文来源于网络,如有侵权请联系删除。