Steam<T>
接口流
-
-
类型参数:
-
T
- 流元素的类型
-
所有超级接口:
- AutoCloseable , BaseStream <T, Stream <T >>
公共接口Stream <T> 扩展BaseStream <T,Stream <T >>
支持顺序和并行聚合操作的一系列元素。以下示例说明使用Stream
and 的聚合操作IntStream
:
在这个例子中,int sum = widgets.stream() .filter(w -> w.getColor() == RED) .mapToInt(w -> w.getWeight()) .sum();
widgets
是一个Collection<Widget>
。我们通过创建一个Widget
对象流Collection.stream()
,对其进行过滤以产生只包含红色小部件的流,然后将其转换为int
代表每个红色小部件权重的值流。然后将这个流加起来产生总重量。除了
Stream
,这是对象引用的流,存在用于原始特IntStream
,LongStream
以及DoubleStream
,所有这些都称为“流”和符合此处描述的特征和限制。为了执行计算,流 操作被组成 流管道。一个流管道由一个源(可能是一个数组,一个集合,一个生成器函数,一个I / O通道等),零个或多个中间操作(将流转换成另一个流等
filter(Predicate)
) 终端操作(产生结果或副作用,如count()
orforEach(Consumer)
)。流是懒惰的; 源数据的计算仅在终端操作启动时执行,而源元素仅在需要时消耗。收藏和流媒体虽然有一些肤浅的相似之处,却有着不同的目标。收藏主要关心对元素的有效管理和访问。相比之下,流不提供直接访问或操作元素的手段,而是关注于声明性地描述它们的来源以及将在该来源上进行的计算操作。然而,如果提供的流的操作不提供所期望的功能性,
BaseStream.iterator()
并且BaseStream.spliterator()
操作可用于执行受控的遍历。流管道,就像上面的“小部件”示例一样,可以被视为流源上的查询。除非源代码被明确设计用于并发修改(如a
ConcurrentHashMap
),否则在查询流源时修改流源可能会导致不可预知或错误的行为。大多数流操作接受描述用户指定行为的参数,例如上例中
w -> w.getWeight()
传递给 的lambda表达式mapToInt
。为了保持正确的行为,这些行为参数:这样的参数总是一个实例 功能接口如
Function
,也常常lambda表达式或方法的引用。除非另有规定,否则这些参数必须 是非空的。应该只对一个数据流进行操作(调用中间或终端流操作)一次。这排除了例如“分叉”流,其中相同的源馈送两个或更多个管线,或者多个遍历相同的流。如果流
IllegalStateException
检测到流正在被重用,可能会抛出流。然而,由于一些流操作可能返回它们的接收者而不是新的流对象,所以在所有情况下可能无法检测到重用。流有一个
BaseStream.close()
方法和实现AutoCloseable
,但几乎所有的流实例实际上并不需要在使用后关闭。一般来说,只有来源是IO通道的流(例如返回的流Files.lines(Path, Charset)
)需要关闭。大多数流都由集合,数组或者生成函数来支持,而不需要特殊的资源管理。(如果流确实需要关闭,则可以在try
-with-resources语句中将其声明为资源。)流管线可以按顺序或并行执行 。这个执行模式是流的一个属性。流是通过顺序或并行执行的初始选择创建的。(例如,
Collection.stream()
创建一个顺序流,并Collection.parallelStream()
创建一个并行流。)执行模式的这种选择可以由BaseStream.sequential()
orBaseStream.parallel()
方法修改 ,并且可以用该BaseStream.isParallel()
方法查询。-
以来:
- 1.8 也可以看看:
-
IntStream
,LongStream
,DoubleStream
, java.util.stream
-
-
-
嵌套类摘要
修饰符和类型 界面和说明 static interface
Stream.Builder<T>
一个可变的建设者Stream
。
-
方法摘要
修饰符和类型 方法和描述 boolean
allMatch(Predicate<? super T> predicate)
返回此流的所有元素是否与提供的谓词匹配。boolean
anyMatch(Predicate<? super T> predicate)
返回此流的任何元素是否与提供的谓词匹配。static <T> Stream.Builder<T>
builder()
返回一个生成器Stream
。<R,A> R
collect(Collector<? super T,A,R> collector)
<R> R
collect(Supplier<R> supplier, BiConsumer<R,? super T> accumulator, BiConsumer<R,R> combiner)
static <T> Stream<T>
concat(Stream<? extends T> a, Stream<? extends T> b)
创建一个延迟连接的流,其元素是第一个流的所有元素,后跟第二个流的所有元素。long
count()
返回此流中元素的数量。Stream<T>
distinct()
static <T> Stream<T>
empty()
返回一个空的顺序Stream
。Stream<T>
filter(Predicate<? super T> predicate)
返回由此流的元素组成的流,该流匹配给定的谓词。Optional<T>
findAny()
Optional<T>
findFirst()
<R> Stream<R>
flatMap(Function<? super T,? extends Stream<? extends R>> mapper)
返回一个流,该流包含将此流的每个元素替换为通过将所提供的映射函数应用于每个元素而生成的映射流的内容的结果。DoubleStream
flatMapToDouble(Function<? super T,? extends DoubleStream> mapper)
返回一个DoubleStream
包含将此流的每个元素替换为通过将所提供的映射函数应用于每个元素而生成的映射流的内容的结果。IntStream
flatMapToInt(Function<? super T,? extends IntStream> mapper)
返回一个IntStream
包含将此流的每个元素替换为通过将所提供的映射函数应用于每个元素而生成的映射流的内容的结果。LongStream
-