java8新特新:接口流-Stream()接口和所有方法(map,foreach,filter,count,distinct,limit,collect,skip,sorted)

Steam 

接口流

  • 类型参数:
    T  - 流元素的类型
    所有超级接口:
    AutoCloseable BaseStream   Stream  >


    公共接口Stream  
    扩展BaseStream Stream >
    支持顺序和并行聚合操作的一系列元素。以下示例说明使用 Stream and 的聚合操作  IntStream
    
         int sum = widgets.stream()
                          .filter(w -> w.getColor() == RED)
                          .mapToInt(w -> w.getWeight())
                          .sum();
     
    在这个例子中, widgets 是一个 Collection 我们通过创建一个 Widget 对象 Collection.stream() ,对其进行过滤以产生只包含红色小部件的流,然后将其转换为 int 代表每个红色小部件权重的值然后将这个流加起来产生总重量。

    除了Stream,这是对象引用的流,存在用于原始特IntStreamLongStream以及DoubleStream,所有这些都称为“流”和符合此处描述的特征和限制。

    为了执行计算,流 操作被组成 流管道一个流管道由一个源(可能是一个数组,一个集合,一个生成器函数,一个I / O通道等),零个或多个中间操作(将流转换成另一个流等filter(Predicate)) 终端操作(产生结果或副作用,如count()or forEach(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()or BaseStream.parallel()方法修改 ,并且可以用该BaseStream.isParallel()方法查询

    以来:
    1.8
    也可以看看:
    IntStream ,  LongStream ,  DoubleStream ,  java.util.stream
    • 嵌套类摘要

      嵌套类
      修饰符和类型 界面和说明
      static interface  Stream.Builder
      一个可变的建设者 Stream
    • 方法摘要

      所有方法 静态方法 实例方法 抽象方法 默认方法
      修饰符和类型 方法和描述
      boolean allMatch(Predicate predicate)
      返回此流的所有元素是否与提供的谓词匹配。
      boolean anyMatch(Predicate predicate)
      返回此流的任何元素是否与提供的谓词匹配。
      static  Stream.Builder builder()
      返回一个生成器 Stream
       R collect(Collector collector)
      使用a对此流的元素执行 可变减少 操作  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 如果流为空,则返回空。
       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 包括 seed f(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.util.stream继承的方法 BaseStream

        close, isParallel, iterator, onClose, parallel, sequential, spliterator, unordered

你可能感兴趣的:(JavaSE)