java——集合篇——java.util.stream.Stream

简单了解为什么需要 Stream

Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错, 但使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。所以说,Java 8 中首次出现的 java.util.stream 是一个函数式语言+多核时代综合影响的产物。

什么是聚合操作

在传统的 J2EE 应用中,Java 代码经常不得不依赖于关系型数据库的聚合操作来完成诸如:

客户每月平均消费金额
最昂贵的在售商品
本周完成的有效订单(排除了无效的)
取十个数据样本作为首页推荐
这类的操作。

举例说明

但在当今这个数据大爆炸的时代,在数据来源多样化、数据海量化的今天,很多时候不得不脱离 RDBMS,或者以底层返回的数据为基础进行更上层的数据统计。而 Java 的集合 API 中,仅仅有极少量的辅助型方法,更多的时候是程序员需要用 Iterator 来遍历集合,完成相关的聚合应用逻辑。这是一种远不够高效、笨拙的方法。

public interface Stream extends BaseStream>

方法概要

修饰符和类型 方法 说明
boolean allMatch(Predicate predicate) 返回此流的所有元素是否与提供的谓词匹配。
boolean anyMatch(Predicate predicate) 返回此流的任何元素是否与提供的谓词匹配
static  Stream.Builder builder() 返回的构建器Stream
 R collect(Collector collector) 使用对此流的元素执行可变还原操作 Collector
 R collect(Supplier supplier, BiConsumer accumulator, BiConsumer combiner) 在此流的元素上执行可变的归约运算。
static  Stream concat(Stream a, Stream b) 创建一个延迟串联的流,其元素是第一个流的所有元素,然后是第二个流的所有元素。
long count() 返回此流中的元素计数。
Stream distinct()

 

返回由该流的不同元素组成的流(根据 Object.equals(Object))。
static  Stream empty() 返回一个空序列Stream
Stream filter(Predicate predicate) 返回一个流,该流包含与给定谓词匹配的该流的元素。
Optional findAny()

返回Optional描述流中某些元素的描述;Optional如果流为空,则返回空。

 
Optional findFirst()

返回Optional描述此流的第一个元素的描述;Optional如果流为空,则返回null 。

 
 Stream flatMap(Function> mapper)

返回一个流,该流包括将流的每个元素替换为通过将提供的映射函数应用于每个元素而生成的映射流的内容而得到的结果。

 
DoubleStream flatMapToDouble(Function mapper)

返回一个DoubleStream结果,该结果由将该流的每个元素替换为通过将所提供的映射函数应用于每个元素而生成的映射流的内容而得到的结果。

 
IntStream flatMapToInt(Function mapper)

返回一个IntStream结果,该结果由将该流的每个元素替换为通过将所提供的映射函数应用于每个元素而生成的映射流的内容而得到的结果。

 
LongStream flatMapToLong(Function mapper)

返回一个LongStream结果,该结果由将该流的每个元素替换为通过将所提供的映射函数应用于每个元素而生成的映射流的内容而得到的结果。

 
void forEach(Consumer action)

为此流的每个元素执行一个动作。

 
void forEachOrdered(Consumer action)

如果流具有定义的遇到顺序,则按流的遇到顺序对此流的每个元素执行操作。

 
static  Stream generate(Supplier s)

返回无限的顺序无序流,其中每个元素都由提供的生成Supplier

 
static  Stream iterate(T seed, UnaryOperator f)

返回一个无限连续有序Stream通过函数的迭代应用产生f为初始元素seed,产生Stream包括seedf(seed), f(f(seed)),等。

 
Stream limit(long maxSize)

返回由该流的元素组成的流,其maxSize长度被截断为不超过长度。

 
 Stream map(Function mapper)

返回一个流,该流包括将给定函数应用于此流的元素的结果。

 
DoubleStream mapToDouble(ToDoubleFunction mapper)

返回DoubleStream由将给定函数应用于此流的元素的结果组成的。

 
IntStream mapToInt(ToIntFunction mapper)

返回IntStream由将给定函数应用于此流的元素的结果组成的。

 
LongStream mapToLong(ToLongFunction mapper)

返回LongStream由将给定函数应用于此流的元素的结果组成的。

 
Optional max(Comparator comparator)

根据提供的返回此流的最大元素 Comparator

 
Optional min(Comparator comparator)

根据提供的返回此流的最小元素 Comparator

 
boolean noneMatch(Predicate predicate)

返回此流中是否没有元素与提供的谓词匹配。

 
static  Stream of(T... values)

返回其元素为指定值的顺序有序流。

 
static  Stream of(T t)

返回Stream包含单个元素的序列。

 
Stream peek(Consumer action)

返回由该流的元素组成的流,并在从结果流中消耗元素时对每个元素另外执行提供的操作。

 
Optional reduce(BinaryOperator accumulator)

执行减少有关此流的元件,使用 缔合累积功能,并返回一个Optional描述该减小值,如果有的话。

 
T reduce(T identity, BinaryOperator accumulator)

使用提供的标识值和关联 累加函数对此流的元素 执行归约,然后返回归约后的值。

 
 U reduce(U identity, BiFunction accumulator, BinaryOperator combiner)

执行减少有关此流的元件,使用所提供的身份,积累和组合功能。

 
Stream skip(long n)

在丢弃流的第一个n元素之后,返回由该流的其余元素组成的流。

 
Stream sorted()

返回由该流的元素组成的流,并根据自然顺序排序。

 
Stream sorted(Comparator comparator)

返回由该流的元素组成的流,并根据提供的进行排序Comparator

 
Object[] toArray()

返回包含此流元素的数组。

 
 A[] toArray(IntFunction generator)

返回一个包含此流元素的数组,使用提供的generator函数分配返回的数组以及分区执行或调整大小可能需要的任何其他数组

 

 

 

 

 

 

 

 

你可能感兴趣的:(java)