关键词:
Java8 Stream,操作符,内部迭代
集合与流的关系
集合是数据结构,主要目的是以特定的时间/空间复杂度存储和访问元素;流的目的在于表达计算
集合包含整个数据结构,是一个内存中的数据结构,它包含的数据结构中目前所有的值。集合中的每个元素都得先计算出来才能添加/删除到集合中,元素都得先算出来才能成为集合的一部分。
流在概念上是固定的数据结构,其元素按需计算的,按需生成。流就像是一个延迟创建的集合,只有在消费者要求的时候才会有计算值。
Stream库的内部迭代可以自动选择一种适合你硬件的数据表示和并行实现。
流的创新点
只遍历一次
外部迭代变成了内部迭代,遍历的操作被封装到了流的类库里,向外暴露的是循环遍历中对元素的操作
各操作符
1. 按使用位置划分
中间操作:
skip,limit, filter, distinct, map, flatMap,sorted...
终端操作:
count, collection, foreach
匹配:anyMatch, allMatch, noneMatch短路操作,找到结果就返回
查找:findAny, findFirst, reduce
当调用终端操作时,流的遍历才真正开始
2. 按状态划分
有状态操作:比如reduce,sorted,distinct
无状态操作:比如map,filter
原始类型流特化1. 映射到数值流
mapToInt, mapToDouble, mapToLong
2. 转换回对象流
boxed, mapToObj
创建流的几种方式由值创建流
Stream.of
由数组创建流
Array.stream()
由文件创建流
Files.lines() 返回文件中的各行构成的字符串流
由函数生成流&无限流
Stream.iterate() 根据函数生成一系列值
Stream.generate
收集器
提供三大功能:
将元素归约和汇总为一个值
元素分组
元素分区
领取专属 10元无门槛券
私享最新 技术干货