首页 > 代码库 > [Java 8 Lambda] java.util.stream 简单介绍
[Java 8 Lambda] java.util.stream 简单介绍
包结构例如以下所看到的:
这个包的结构非常easy,类型也不多。
BaseStream接口
全部Stream接口类型的父接口,它继承自AutoClosable接口,定义了一些全部Stream都具备的行为。
由于继承自AutoClosable接口,所以全部的Stream类型都能够用在Java 7中引入的try-with-resource机制中,以达到自己主动关闭资源的目的。实际上,仅仅有当Stream是通过Socket,Files IO等方式创建的时候,才须要关闭它。对于来自于Collections,Arrays的Stream,是不须要关闭的。
Stream接口
定义了众多Stream应该具有的行为。
最典型的比方filter方法族,map方法族以及reduce方法族,这三个方法是FunctionalProgramming的标志。典型的Map-Filter-Reduce模式便是依靠这三个操作来定义的。
与此同一时候,Stream接口还定义了一些用于创建Stream的static方法,创建的Stream能够是有限的,也能够是无限的。有限的非常好理解,而无限Stream是一个新概念,通过generate方法或者iterate方法实现。
IntStream, LongStream以及 DoubleStream接口
基于原生类型int, long以及double的Stream。提供了众多类型相关的操作。
典型的比如,sum方法,min/max方法,average方法等。这些方法都是Reduce操作的详细实现。
Collect接口
对于Reduce操作的抽象。此接口中定义了经常使用的Reduce操作。
当中定义的Reduce操作能够通过串行或者并行的方式进行实现。BaseStream接口中的parallel,sequential,unordered方法提供的高层API使并发程序设计变得很简洁。
毕竟,Map-Filter-Reduce模式的灵魂就在于并行计算。
Collectors类
提供了众多能够直接使用的Reduce操作。
典型的比方groupingBy以及partitioningBy操作。它们都能够通过串行或者并行的方式进行实现。比方,groupingByConcurrent会使用并行的方式进行grouping操作。
StreamSupport类
提供了底层的一些用于操作Stream的方法,假设不须要创建自己的Stream,一般不须要使用它。