BaseStream接口已成为“时尚潮流”

Stream的父接口是BaseStream,后者是所有流实现的顶层接口,定义如下:


  1. public interface BaseStream<T, S extends BaseStream<T, S>>  
  2.         extends AutoCloseable {  
  3.     Iterator<T> iterator();  
  4.     Spliterator<T> spliterator();  
  5.     boolean isParallel();  
  6.     S sequential();  
  7.     S parallel();  
  8.     S unordered(); 
  9.     S onClose(Runnable closeHandler);  
  10.     void close();  

其中,T为流中元素的类型,S为一个BaseStream的实现类,它里面的元素也是T并且S同样是自己:

S extends BaseStream<T, S>

是不是有点晕?

其实很好理解,我们看一下接口中对S的使用就知道了:如sequential()、parallel()这两个方法,它们都返回了S实例,也就是说它们分别支持对当前流进行串行或者并行的操作,并返回「改变」后的流对象。

如果是并行一定涉及到对当前流的拆分,即将一个流拆分成多个子流,子流肯定和父流的类型是一致的。子流可以继续拆分子流,一直拆分下去…

也就是说这里的S是BaseStream的一个实现类,它同样是一个流,比如Stream、IntStream、LongStream等。

【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章