Java Stream流
stream流的作用:结合了Lambda表达式,简化集合、数组的操作
-
先得到一条Stream流(流水线),并把数据放上去
获取方式 | 方法名 | 说明 |
---|---|---|
单列集合 | Default Stream<E> stream() | Collection中的默认方法 |
双列集合 | 无 | 无法直接使用Stream流,可以采用keySet或者enterSet中转 |
数组 | public static <T> Stream<T> stream(T[] array) | Arrays工具类中的静态方法 |
一堆零散数据 | public static <T> Stream<T> of(T... values) | Stream接口中的静态方法,数据必须是同一类型 |
-
Stream流的中间方法
名称 | 说明 |
---|---|
Stream<T> filter(Predicate<? Super T> predicate) | 过滤 |
Stream<T> limit(long maxSize) | 获取前几个元素 |
Stream<T> skip(long n) | 跳过前几个元素 |
Stream<T> distinct() | 元素去重,依赖(hashCode和equals方法) |
static <T> Stream<T> concat(Stream a,Stream b) | 合并a和b两个流为一个流 |
Stream<R> map(Function<T,R> mapper) | 转换流中的数据类型 |
注意:中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程;修改Stream流中的数据,不会影响原来集合或者数组中的数据
-
Stream流的终结方法
名称 | 说明 |
---|---|
void forEach(Consumer action) | 遍历 |
long count() | 统计 |
toArray() | 收集流中的数据,放到数组中 |
collect(Collector collector) | 收集流中的数据,放到集合中 |
方法引用
把已经有的方法拿过来用,当做函数式接口中抽象方法的方法体。方法引用符::
方法引用时的注意点:
-
需要有函数式接口
-
被引用方法必须已经存在
-
被引用方法的形参和返回值需要跟抽象方法保持一致
-
被引用方法的功能要满足当前的需求
方法引用的分类
引用静态方法
格式:类名::静态方法 范例:Integer::parseInt
引用成员方法
格式:对象::成员方法
-
其他类:其他类对象::方法名
-
本类:this::方法名
-
父类:super::方法名
引用构造方法
格式:类名::new 范例:Student::new
使用类名引用成员方法
格式:类名::成员方法 范例:String::substring
引用数组的构造方法
格式:数据类型[]::new 范例:int[]::new