本文最后更新于 301 天前,其中的信息可能已经有所发展或是发生改变。
Stream
介绍
- java8引入的种数据处理方法,位于java.util.stream包
- 主要用于对集合或其他数据源的操作
- 分为三种操作,创建流,处理流和终结流
特点
- 流本身不存储数据
- 每一次处理流都会返回一个Stream对象(链式调用)
- 函数式风格处理数据
- 流操作是惰性的,不执行终结流操作,声明的操作就不会立即执行,只有执行了终结流操作,数据才会真正的处理
创建流
of()
介绍
- Stream流的静态方法
- 用于创建一个包含一组已知元素的流
参数
static Stream<T> of(T... values)
generate()
介绍
- Stream流的静态方法
- 用于创建一个可以无限生成元素的流
- 生成的流是无限的,需要进行限制操作(limit方法)
参数
static Stream<T> generate(Supplier<T> supplier)
Arrays.stream()
介绍
stream()
介绍
处理流
介绍
- 对流进行操作惰性操作
- 返回值仍然是Stream类型
方法
| 方法名 |
描述 |
Stream filter(Predicate<T> predicate) |
过滤流,从流中过滤符合条件的元素 |
Stream distinct() |
筛选流,去除流中的重复元素 |
Stream limit(long maxSize) |
截断流,使流中元素不超过给定数量,通常配合generate使用 |
Stream skip(long n) |
跳过流,跳过流中前n个元素,元素不足返回空流 |
Stream peek(Consumer<T> action) |
操作流,对流中的每个元素进行操作 |
Stream sorted([Comparator com]) |
排序流,对流中元素按自然顺序进行排序,如果传入了比较器则根据比较器进行排序 |
Stream map(Function<T,R> function) |
映射流,对流中的元素进行操作,并映射一个新的元素 |
终结流
介绍
方法
| 方法名 |
描述 |
long count() |
返回流中元素数量 |
void forEach(Consumer<T> consumer) |
迭代流中元素 |
T collect(Collect collect) |
将流中元素转换成一个集合,通常配合集合工具类使用 |
T reduce(T identity,BinaryOperator<T> b) |
根据identity(初始值),进行累积操作,最后返回累积数据 |
Optional<T> reduce(BinaryOperator<T> b) |
没有初始值,进行累积操作,最后返回累积数据.该流可能为空,不存在数据进行计算 |
boolean anyMatch(Predicate<T> predicate) |
检查流中某个元素是否满足条件 |
boolean allMatch(Predicate<T> predicate) |
检查流中所有元素是否满足条件 |
boolean noneMatch(Predicate<T> predicate) |
检查流中所有元素是否不满足条件 |
工具类
Collectors
介绍
java.util.stream
- 收集器
- 用于将流中元素转换到不同类型的结果容器中
方法
| 方法 |
描述 |
toList() |
返回收集List元素的收集器 |
toSet() |
返回收集Set元素的收集器 |
toMap() |
返回收集Map元素的收集器 |
joining(delimiter,prefix,suffix) |
返回将元素拼接成字符串的收集器,支持分隔符,前缀,后缀 |
groupingBy |
|
partitioningBy() |
|
counting() |
|