Stream流
Stream流操作本身不是一个集合对象,它只是用来操作集合的一种方式,可以实现,生成,过滤等操作,Stream不会改变数据源,相反它会返回一持有新Stream的对象
创建流的四种方式
1.通过集合
这里说明一下什么是顺序流,什么是并行流,
顺序流在操作集合的时候,是逐一过滤,分组,类似于我们的for循环,
并行流在操作集合时候,则是多线程执行,同时操作集合,通过并行流获得的数据可能会打乱原来的顺序.
2.通过数组
3.通过自身
4.创建无限流
Stream流的中间操作
多个中间操作可以连接起来(每次中间操作都会返回Stream,可以让其调用下一个中间操作),这些中间操作像流水线一样,不过只有在触发流的终止操作的时候,这些连在一起的中间操作才会执行,否则这些中间操作不会执行,这种求知方式也被称为**“惰性求值”**.
筛选和切片:
filter() ---- 接受一个lambda表达式 执行过滤操作
distinct() -------筛选,通过流所产生的元素的hashCode()和 equals()去除重复元素
limit(long maxSize) -------- 截断流,使其元素不超过给定数量
skip(long n ) -------- 跳过元素,返回一个扔掉了前N个元素的流,若流中元素不足N个
,则返回一个空流,与limit(n)互补
映射
map(Function F) ---- 接受一个函数作为参数,该函数会被应用到每一元素上,并将其映射成一个新的元素
flatMap(Function F) ---- 接收一个函数作为参数,并把六中的每一个值都替换成另一个流,然后合并成一个流
排序
sorted() ----- 产生一个新流,其中按照自然排序排序(comparable)
sorted(comparator com) ------ 产生一个新流,其中按照比较强顺序排序
Stream流的终止操作
匹配
归约
收集