· 在Java8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream流概念。
· 目的:用于简化集合和数组操作的API。
· Stream流式思想的核心
1.先得到集合或者数组的Stream流(就像一根传送带)。
2.把元素放上去
3.然后就用这个Stream流简化的API来方便的操作元素。
· Stream流的三类方法
1.获取Stream流
创建一条流水线,并把数据放到流水线上准备进行操作
2.中间方法
流水线上的操作,一次操作完毕之后,还可以继续进行其他操作
3.一个Stream流只能有一个终结方法,就是流水线上的最后一个操作
· 集合获取Stream流的方式
可以使用Collecting接口中的默认方法stream()生存流
default Stream<E>stream()~~~~获取当前集合对象的Stream流
· 数组获取Stream流的方式
public static <T>Stream<T>stream(T[] array)~~~~获取当前数组Stream流
public static<t>Stream<T> of(T...values)~~~~获取当前数组/可变数据的Stream流
Stream流常用的API(中间操作方法)
· 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两个流为一个流
ps:1.中间方法也称为非终结方法,调用完成后返回新的Stream流可以继续使用,支持链式编程。
2.在Stream流中无法直接修改集合,数组中的数据。
Stream流的常见终结操作方法
· void forEach(Consumer action)~~~~对此流的每个元素执行遍历操作
· long count()~~~~返回此流中的元素
ps:终结操作方法,调用完成后就无法继续使用了,原因是不会返回Stream了。
Stream流的收集操作
· 收集Stream流的含义:就是把Stream流操作后的结果数据转回到集合或数组中去。
· Stream流:方便操作集合和数组的手段。
· 集合/数组:才是开发中的目的。
Stream流的收集方法
· R collect(Collector collector)~~~~开始收集Stream流,指定收集器。
Collectors工具类提供了具体的收集方式
· public static<T>Collector toList()~~~~把元素收集到List集合中
· public static<T>Collector toSet()~~~~把元素收集到Set集合中
· public static Collector toMap(Function keyMapper,Function valueMapper)~~~~把元素收集到Map集合中