Java Stream流说白了就是一组能进行聚合操作的数据。
下边是它的具体定义:
从数据源(可以是文件,数组,不过常见的还是各种集合,例如list,Hashset)转换而来的能够支持聚合操作 (例如filter,map) 的元素序列 (该元素序列是Stream类型的,例如Stream(String));Stream流在使用上类似sql,即强调想做什么,而不是怎么做
Java Stream流可以通过Collection接口的stream方法创建,例如Stream<String> st = new ArrayList<String>().stream();也可以通过Stream.of()方法创建,例如Stream<Integer> st = Stream.of(1,2,3);
Stream流常用的聚合操作(要注意一点,流经过聚合后返回的还是流):
filter:按照某种方式过滤数据,例如:Stream<Integer> st = Stream.of(1,2,3); st.filter(t -> t>1);这时会返回一个Stream<Integer>流,这个流包含了2,3两个元素,filter的入参是一个lambda表达式,表示拿到大于2的元素,filter的入参实际上是一个Predicate接口,该lambda表达式对这个Predicate接口未实现方法进行了填充
distinct:去重,如果是对引用类型去重的话,该引用类型应该重写hashcode和equals方法
sorted排序:基本数据类型直接排,引用类型需要实现comparable接口
map:转换:就是对流里每个元素进行函数(例如,自己的写的lambda表达式,或对现有类的方法引用)计算
flatMap:对流里每个元素进行函数计算,并将结果合并
toArray:将结果转化为数组
collect:将结果转化为相应的集合,例如collect(Collectors.toList());将结果转换为list
