BaseStream文档
一、概述
BaseStream接口是Stream的基接口,支持串行和并行的聚合操作。该接口任然是AutoCloseable的子接口,支持了自动关闭流的功能。其接口声明如下:
public interface BaseStream<T, S extends BaseStream<T, S>> extends AutoCloseable
泛型含义:
T 是流中元素的类型
S 是BaseStream的实现
以Stream流为例
public interface Stream<T> extends BaseStream<T, Stream<T>>
Stream是BaseStream的子接口,其泛型是T和Stream<T>
父接口的S就是此处的Stream<T>
代码说明
interface Base<T, S extends Base<T, S>> {
//返回泛型S的实例
S getS();
}
interface Single<T> extends Base<T,Single<T>>{
}
class MyTest{
public static void main(String[] args) {
//String就是上述的泛型T
Single<String> stringSingle=new Single<String>() {
@Override
public Single<String> getS() {
//此处返回的就是Single<String>
return null;
}
};
}
}
综上 T就是流中元素(String)
S就是流,流中的元素任然是T(Single<String>)
以上设计保证了流的中间操作返回的流的元素一致性
二、方法说明
Iterator<T> iterator()
该方法返回流中元素的迭代器,泛型就是T(流中元素的类型)
Spliterator<T> spliterator()
该方法返回流中元素的分割迭代器,泛型就是T(流中元素的类型)
boolean isParallel()
该方法返回流是否是并行流(流中元素的类型),必须在终止操作之前调用此方法,否则会造成超出预期的结果。
S sequential()
该方法返回的是S,上述解释S就是一个新的Stream,新Stream的元素仍然是T,如果已经是串行的流调用此方法则返回本身。
S parallel()
同上述方法一致,此方法返回的流是并行流。
S unordered()
该方法返回的是S,上述解释S就是一个新的Stream,新Stream的元素仍然是T。新流是无序的,如果旧流本身是无序的或者已经设置为无序,则新流就是旧流本身。
S onClose(Runnable closeHandler)
该方法返回的是S,上述解释S就是一个新的Stream,新Stream的元素仍然是T。当close方法调用时,参数中的closeHandler才会执行,并且执行的顺序是添加的顺序。及时先添加的closeHandler抛出了异常,后续的closeHandler任会执行。第一个异常会传递到调用者处,后续的异常则是一起汇聚为suppressed exceptions。
void close()
关闭流,会导致上述方法中所有的closeHandler调用。