一、定义
public interface Stream<T> extends BaseStream<T,Stream<T>>
Stream是jdk1.8引入的,和lambda表达式一起,大大方便了我们的编程。stream不是一种数据结构,它是数据的视图。所以它不是一个数据源,通过数组或者集合来创建:
-Collection.stram()或Collection.parallelsStream()
-Array.stream()
二、常用函数
stream的操作分为两类:中间操作和结束操作。
中间操作:就是流的中间状态,它是惰性操作,不立即执行,每次调用中间操作只是产生一个新的stream视图而已。
结束操作:流最后的执行结果。
常用的中间操作:filter(过滤),map(转换),sorted(排序),distinct(去重);
常用的结束操作:collect(),max(最大),min(最小),forEach(遍历),findFirst(返回第一个)
这些操作基本上很常用也很简单,主要是这个collect()收集器,下面我们看看这个collect()操作。
stream.collect()将一个stream转为一个集合需要哪些东西呢?
1.目标集合
2.每个数据的操作
3.最后数据的合并操作
所以collect()就定义为:
<R> R collect(Supplier<R> supplier,
BiConsumer<R, ? super T> accumulator,
BiConsumer<R, R> combiner);
但显然这样操作太麻烦了,所以jdk提供了一个更加简单但方式:
<R, A> R collect(Collector<? super T, A, R> collector);
可以通过Collections的工具类生成Collector,这样就很方便了。
collect()生成list:
ArrayList list = stream.collect(Collectors.toList())
collect()生成map:
Map<Integer,User> map = stream().collect(Collectors.toMap(User::getId,Function.identity()));
stream只要你用溜了,写起代码来会大大方便很多,省去了我们很多自己编码,所以要掌握好啊。
参考文献:
https://www.cnblogs.com/CarpenterLee/p/6545321.html