查询stream流的特征

查询stream流的特征

stream流的特征

Stream API 依赖于一个特殊的对象,即 Spliterator 接口的一个实例。Spliterator在Stream API中的角色类似于Iterator在Collection API中的角色。此外,由于 Stream API 支持并行处理,Spliterator对象还控制stream流如何在处理并行化的不同 CPU 之间拆分其元素。

The name is the contraction of split and iterator.

Spliterator 对象带有流的特性。这些特性不是您经常使用的,但知道它们是什么将帮助您在某些情况下编写更好、更高效的pipeline管道。

stream流的特征如下

特征说明
Spliterator.ORDEREDstream流中元素的处理顺序很重要
Spliterator.DISTINCTstream流中没有重复的元素
Spliterator.NONNULLstream流中没有null元素
Spliterator.SORTEDstream流中的元素已排序
Spliterator.SIZEDstream流中的元素个数已知
Spliterator.SUBSIZED拆分stream流会得到2个SIZEDstream流
Spliterator.IMMUTABLE元素源不可变
Spliterator.CONCURRENT元素源可以由多个线程安全的同时修改

每个stream流的创建都会设置或取消设置这些特征。

记住stream流可以由以下2种方式创建:

  1. 从数据源创建stream流

  2. 每次在stream流中使用中间操作也会创建新的stream流

ORDEREDstream流

ORDERED streams are created with ordered sources of data.

unordered()可以删除stream流的ORDERED特征。

Keeping track of the order of the elements of a stream may lead to overheads for parallel streams.

Keeping a stream ORDERED may be costly in some cases, for instance when you are using parallel streams.

SORTEDstream流

A SORTED stream is a stream that has been sorted.

中间操作可能清除stream流的SORTED特征。

Collection<String> stringCollection = List.of("one", "two", "two", "three", "four", "five");

Stream<String> strings = stringCollection.stream().sorted();    // SORTED Stream
Stream<String> filteredStrings = strings.filtered(s -> s.length() < 5);    // SORTED Stream
Stream<Integer> lengths = filteredStrings.map(String::length);    // not SORTED Stream

DISTINCTstream流

A DISTINCT stream is a stream with no duplicates among the elements it is processing.

例如从HashSet创建的stream流,或调用distinct()中间操作

使用过滤时保留特征,但映射或者flatMap()会丢失特征。

Collection<String> stringCollection = List.of("one", "two", "two", "three", "four", "five");

Stream<String> strings = stringCollection.stream().distinct();    // DISTINCT
Stream<String> filteredStrings = strings.filtered(s -> s.length() < 5);    // DISTINCT
Stream<Integer> lengths = filteredStrings.map(String::length);    // not DISTINCT

NONNULLstream流

A NONNULL stream is a stream that does not contain null values.

映射同样会丢失特征。

SIZEDSUBSIZEDstream流

映射会保留特征,但flatMap(), 过滤和distinct()会擦除特征。

It is always better to have SIZED and SUBSIZED stream for parallel computations.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值