- Stream流:方便操作集合的API
Collection下的List,Set类型,都能直接调用stream()方法获取串行流,parallelStream()获取并行流,但考虑到线程安全,性能开销等方面,parallelStream()谨慎使用。
Arrays.stream():参数中可以传入一个数组转为流
Stream 中间操作:
filter():接收Lambda ,从流中排除某些元素
limit():截断流,使其元素不超过给定数量
skip(n): 返回一个扔掉了前n个元素的流。若流中元素不足n个,则返回一个空,与limit(n)互补
distinct():通过流所生成元素的hashCode()和equals()去除重复元素
map():将元素转换成其他形式或者提取信息。接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素
flatMap():与map类似,区别在于将元素转换成流,并将结果中的流合并成一个流,
sorted():有两种方法,一种是不传任何参数,叫自然排序,还有一种需要传Comparator 接口参数,叫做定制排序
Stream 终止操作:
allMatch():检查是否匹配所有元素
anyMatch():检查是否至少匹配所有元素
noneMatch():检查是否没有匹配所有元素
findFirst ():返回第一个元素【findFirst 返回的是一个Optional的对像,他将我们的真实对象封装了一层,这是为了避免空指针。而且这个Optional对象为我们提供了一个orElse方法,作用是当我们得到的这个对象为空时,我们可以传入一个新的对象去替代它】
findAny():返回当前流中任意元素
count ():返回流中元素总个数
max ():返回流中最大值
min():返回流中最小值
collect():将流转换为其他形式。接收一个Collector接口的实现,将流中的元素收集到List,Set,Map等。
collect可用的Collector的收集器实现有:
Collectors.toList() 将流转换成List;
Collectors.toSet()将流转换为Set;
Collectors.toCollection()将流转换为其他类型的集合;
Collectors.counting() 元素个数;
Collectors.groupingBy()分组 ,生成一个 Map<K, List<T>>
- 四大函数式接口:只有一个抽象方法的接口
Consumer:有入参无返回值
Function:有入参有返回值
Predicate:有入参返回boolean值
Supplier:无入参有返回值