Module java.base
Package java.util.stream

Interface IntStream

所有超级接口:
AutoCloseable, BaseStream<Integer,IntStream>

public interface IntStream extends BaseStream<Integer,IntStream>
支持顺序和并行聚合操作的原始int值元素序列。这是Streamint原始专用化。

以下示例说明了使用StreamIntStream进行聚合操作,计算红色小部件的重量总和:


     int sum = widgets.stream()
                      .filter(w -> w.getColor() == RED)
                      .mapToInt(w -> w.getWeight())
                      .sum();
 
有关流、流操作、流管道和并行性的其他规范,请参阅Stream的类文档和java.util.stream的包文档。
自Java版本:
1.8
另请参见:
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Interface
    Description
    static interface 
    一个IntStream的可变构建器。
    static interface 
    表示接受一个int值参数和一个IntConsumer的操作,并且不返回结果。
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    allMatch(IntPredicate predicate)
    返回此流的所有元素是否都与提供的谓词匹配。
    boolean
    anyMatch(IntPredicate predicate)
    返回此流的任何元素是否与提供的谓词匹配。
    返回一个由此流的元素组成的DoubleStream,转换为double
    返回一个由此流的元素组成的LongStream,转换为long
    返回描述此流的元素的算术平均值的OptionalDouble,如果此流为空,则返回一个空的可选项。
    boxed()
    返回一个由此流的元素组成的Stream,每个元素都装箱为Integer
    返回一个IntStream的构建器。
    <R> R
    collect(Supplier<R> supplier, ObjIntConsumer<R> accumulator, BiConsumer<R,R> combiner)
    对此流的元素执行可变减少操作。
    static IntStream
    创建一个懒惰连接的流,其元素是第一个流的所有元素,后跟第二个流的所有元素。
    long
    count()
    返回此流中元素的计数。
    返回由此流的不同元素组成的流。
    default IntStream
    dropWhile(IntPredicate predicate)
    返回,如果此流是有序的,则由此流的剩余元素组成的流,在删除与给定谓词匹配的元素的最长前缀后。
    static IntStream
    empty()
    返回一个空的顺序IntStream
    filter(IntPredicate predicate)
    返回由此流的元素组成的流,这些元素与给定谓词匹配。
    返回描述流中某个元素的OptionalInt,如果流为空,则返回一个空的OptionalInt
    返回描述此流的第一个元素的OptionalInt,如果流为空,则返回一个空的OptionalInt
    flatMap(IntFunction<? extends IntStream> mapper)
    返回由此流的元素替换为应用提供的映射函数到每个元素产生的映射流的内容的结果组成的流。
    void
    forEach(IntConsumer action)
    对此流的每个元素执行一个操作。
    void
    对此流的每个元素执行一个操作,保证对于具有定义的遭遇顺序的流,每个元素都按顺序处理。
    static IntStream
    返回一个无限顺序无序流,其中每个元素由提供的IntSupplier生成。
    static IntStream
    iterate(int seed, IntPredicate hasNext, IntUnaryOperator next)
    返回通过将给定的next函数迭代应用于初始元素而产生的顺序有序IntStream,条件是满足给定的hasNext谓词。
    static IntStream
    iterate(int seed, IntUnaryOperator f)
    返回通过将函数f迭代应用于初始元素seed而产生的无限顺序有序IntStream,生成一个由seedf(seed)f(f(seed))等组成的Stream
    limit(long maxSize)
    返回由此流的元素组成的流,截断长度不超过maxSize
    返回应用给定函数到此流的元素的结果组成的流。
    default IntStream
    返回由此流的元素替换为多个元素(具体为零个或多个元素)的结果组成的流。
    返回由此流的元素应用给定函数的结果组成的DoubleStream
    返回由此流的元素应用给定函数的结果组成的LongStream
    <U> Stream<U>
    mapToObj(IntFunction<? extends U> mapper)
    返回由此流的元素应用给定函数的结果组成的对象值Stream
    max()
    返回描述此流的最大元素的OptionalInt,如果此流为空,则返回一个空的可选项。
    min()
    返回描述此流的最小元素的OptionalInt,如果此流为空,则返回一个空的可选项。
    boolean
    noneMatch(IntPredicate predicate)
    返回此流的没有元素是否都与提供的谓词匹配。
    static IntStream
    of(int t)
    返回包含单个元素的顺序IntStream
    static IntStream
    of(int... values)
    返回一个顺序有序的流,其元素是指定的值。
    peek(IntConsumer action)
    返回由此流的元素组成的流,同时在从生成的流中消耗元素时对每个元素执行提供的操作。
    static IntStream
    range(int startInclusive, int endExclusive)
    返回从startInclusive(包括)到endExclusive(不包括)的增量步长为1的顺序有序IntStream
    static IntStream
    rangeClosed(int startInclusive, int endInclusive)
    返回从startInclusive(包括)到endInclusive(包括)的增量步长为1的顺序有序IntStream
    int
    reduce(int identity, IntBinaryOperator op)
    对此流的元素执行减少操作,使用提供的标识值和一个关联累积函数,并返回减少的值。
    对此流的元素执行减少操作,使用一个关联累积函数,并返回描述减少值的OptionalInt,如果有的话。
    skip(long n)
    返回丢弃流的前n个元素后剩余元素组成的流。
    sorted()
    返回按排序顺序排列的此流的元素组成的流。
    int
    sum()
    返回此流中元素的总和。
    返回描述此流的元素的各种摘要数据的IntSummaryStatistics
    default IntStream
    takeWhile(IntPredicate predicate)
    返回,如果此流是有序的,则由从此流中获取的元素组成的最长前缀流,这些元素与给定谓词匹配。
    int[]
    返回包含此流的元素的数组。

    Methods declared in interface java.util.stream.BaseStream

    close, isParallel, iterator, onClose, parallel, sequential, spliterator, unordered
  • Method Details

    • filter

      IntStream filter(IntPredicate predicate)
      返回由此流的元素组成的流,这些元素与给定谓词匹配。

      这是一个中间操作

      参数:
      predicate - 一个非干扰无状态的谓词,应用于每个元素以确定是否应包含
      返回:
      新流
    • map

      IntStream map(IntUnaryOperator mapper)
      返回由此流的元素应用给定函数的结果组成的流。

      这是一个中间操作

      参数:
      mapper - 一个非干扰无状态的函数,应用于每个元素
      返回:
      新流
    • mapToObj

      <U> Stream<U> mapToObj(IntFunction<? extends U> mapper)
      返回由此流的元素应用给定函数的结果组成的对象值Stream

      这是一个中间操作

      类型参数:
      U - 新流的元素类型
      参数:
      mapper - 一个非干扰无状态的函数,应用于每个元素
      返回:
      新流
    • mapToLong

      LongStream mapToLong(IntToLongFunction mapper)
      返回由此流的元素应用给定函数的结果组成的LongStream

      这是一个中间操作

      参数:
      mapper - 一个非干扰无状态的函数,应用于每个元素
      返回:
      新流
    • mapToDouble

      DoubleStream mapToDouble(IntToDoubleFunction mapper)
      返回由此流的元素应用给定函数的结果组成的DoubleStream

      这是一个中间操作

      参数:
      mapper - 一个非干扰无状态的函数,应用于每个元素
      返回:
      新流
    • flatMap

      IntStream flatMap(IntFunction<? extends IntStream> mapper)
      返回一个流,其中包含将该流的每个元素替换为应用提供的映射函数到每个元素产生的映射流的内容的结果。每个映射流在其内容被放入该流后会被关闭。(如果映射流为null,则使用空流代替。)

      这是一个中间操作

      参数:
      mapper - 一个非干扰无状态的函数,应用于每个元素,产生新值的IntStream
      返回:
      新流
      参见:
    • mapMulti

      default IntStream mapMulti(IntStream.IntMapMultiConsumer mapper)
      返回一个流,其中包含将该流的每个元素替换为多个元素,具体为零个或多个元素。替换是通过将提供的映射函数应用于每个元素以及接受替换元素的consumer参数来执行的。映射函数调用消费者零次或多次以提供替换元素。

      这是一个中间操作

      如果consumer参数在其应用于映射函数的范围之外使用,则结果是未定义的。

      实现要求:
      默认实现在该流上调用flatMap,传递一个行为如下的函数。首先,它使用一个IntConsumer调用映射函数,将替换元素累积到新创建的内部缓冲区中。当映射函数返回时,它从内部缓冲区创建一个IntStream。最后,它将此流返回给flatMap
      参数:
      mapper - 一个非干扰无状态的函数,生成替换元素
      返回:
      新流
      自 JDK 16 起:
      16
      参见:
    • distinct

      IntStream distinct()
      返回一个流,其中包含该流的不同元素。

      这是一个有状态的中间操作

      返回:
      新流
    • sorted

      IntStream sorted()
      返回一个按排序顺序排列的流,其中包含该流的元素。

      这是一个有状态的中间操作

      返回:
      新流
    • peek

      IntStream peek(IntConsumer action)
      返回一个流,其中包含该流的元素,并在从生成的流中消耗元素时对每个元素执行提供的操作。

      这是一个中间操作

      对于并行流管道,操作可能在上游操作提供的任何时间和任何线程中调用。如果操作修改共享状态,则负责提供所需的同步。

      API 注意:
      此方法主要用于支持调试,您希望在流经管道中的某个特定点看到元素:
      
           IntStream.of(1, 2, 3, 4)
               .filter(e -> e > 2)
               .peek(e -> System.out.println("Filtered value: " + e))
               .map(e -> e * e)
               .peek(e -> System.out.println("Mapped value: " + e))
               .sum();
       

      在流实现能够优化掉某些或所有元素的生成(例如使用findFirst等短路操作,或在count()描述的示例中),对于这些元素不会调用操作。

      参数:
      action - 一个非干扰的操作,对从流中消耗的元素执行
      返回:
      新流
    • limit

      IntStream limit(long maxSize)
      返回一个流,其中包含该流的元素,截断长度不超过maxSize

      这是一个短路有状态的中间操作

      API 注意:
      虽然limit()在顺序流管道上通常是廉价的操作,但在有序并行管道上可能非常昂贵,特别是对于较大的maxSize值,因为limit(n)被限制为返回不仅仅是任何n个元素,而是遇到顺序中的前n个元素。使用无序流源(例如generate(IntSupplier))或使用BaseStream.unordered()去除排序约束可能会显著加快并行管道中limit()的速度。如果您的情况允许语义,且需要与遇到顺序一致,则在并行管道中使用limit()导致性能不佳或内存利用不佳时,切换到顺序执行使用BaseStream.sequential()可能会提高性能。
      参数:
      maxSize - 流应限制的元素数量
      返回:
      新流
      抛出:
      IllegalArgumentException - 如果maxSize为负数
    • skip

      IntStream skip(long n)
      返回一个流,其中包含该流中丢弃前n个元素后剩余的元素。如果该流包含的元素少于n个,则将返回一个空流。

      这是一个有状态的中间操作

      API 注意:
      虽然skip()在顺序流管道上通常是廉价的操作,但在有序并行管道上可能非常昂贵,特别是对于较大的n值,因为skip(n)被限制为跳过顺序中的前n个元素。使用无序流源(例如generate(IntSupplier))或使用BaseStream.unordered()去除排序约束可能会显著加快并行管道中skip()的速度。如果您的情况允许语义,且需要与遇到顺序一致,则在并行管道中使用skip()导致性能不佳或内存利用不佳时,切换到顺序执行使用BaseStream.sequential()可能会提高性能。
      参数:
      n - 要跳过的前导元素数量
      返回:
      新流
      抛出:
      IllegalArgumentException - 如果n为负数
    • takeWhile

      default IntStream takeWhile(IntPredicate predicate)
      如果该流是有序的,则返回一个流,其中包含从该流中获取的与给定谓词匹配的元素的最长前缀。否则,如果该流是无序的,则返回一个流,其中包含从该流中获取的与给定谓词匹配的元素的子集。

      如果该流是有序的,则最长前缀是该流的元素的连续序列,这些元素与给定谓词匹配。序列的第一个元素是该流的第一个元素,紧随序列最后一个元素的元素不匹配给定谓词。

      如果该流是无序的,并且该流的一些(但不是全部)元素与给定谓词匹配,则此操作的行为是不确定的;它可以获取匹配元素的任何子集(包括空集)。

      无论该流是有序还是无序,如果该流的所有元素都与给定谓词匹配,则此操作获取所有元素(结果与输入相同),或者如果流的没有元素与给定谓词匹配,则不获取任何元素(结果是空流)。

      这是一个短路有状态的中间操作

      API注释:
      虽然takeWhile()在顺序流水线上通常是廉价的操作,但在有序并行流水线上可能会非常昂贵,因为该操作受限于返回不仅是任何有效前缀,而是遵循遇到顺序中元素的最长前缀。使用无序流源(例如generate(IntSupplier))或通过BaseStream.unordered()去除排序约束可能会显著加快并行流水线中takeWhile()的速度,如果您的情况允许。如果需要与遇到顺序一致,并且在并行流水线中使用takeWhile()时遇到性能或内存利用问题,则切换到使用BaseStream.sequential()进行顺序执行可能会提高性能。
      实现要求:
      默认实现获取此流的spliterator,包装该spliterator以支持遍历此操作的语义,并返回与包装的spliterator关联的新流。返回的流保留此流的执行特性(即根据BaseStream.isParallel()的并行或顺序执行),但包装的spliterator可能选择不支持拆分。当关闭返回的流时,将调用返回流和此流的关闭处理程序。
      参数:
      predicate - 一个非干扰无状态的谓词,用于应用于元素以确定最长前缀的元素。
      返回:
      新流
      自版本:
      9
    • dropWhile

      default IntStream dropWhile(IntPredicate predicate)
      如果此流是有序的,则返回一个流,该流由删除与给定谓词匹配的元素的最长前缀后剩余的元素组成。否则,如果此流是无序的,则返回一个流,该流由删除与给定谓词匹配的元素的子集后剩余的元素组成。

      如果此流是有序的,则最长前缀是此流的元素的连续序列,这些元素与给定谓词匹配。序列的第一个元素是此流的第一个元素,序列的最后一个元素之后的元素不匹配给定谓词。

      如果此流是无序的,并且此流的一些(但不是全部)元素与给定谓词匹配,则此操作的行为是不确定的;它可以自由地删除任何匹配元素的子集(包括空集)。

      无论此流是有序还是无序,如果此流的所有元素都与给定谓词匹配,则此操作会删除所有元素(结果是空流),或者如果流的没有元素与给定谓词匹配,则不会删除任何元素(结果与输入相同)。

      这是一个有状态的中间操作

      API注释:
      虽然dropWhile()在顺序流水线上通常是廉价的操作,但在有序并行流水线上可能会非常昂贵,因为该操作受限于返回不仅是任何有效前缀,而是遵循遇到顺序中元素的最长前缀。使用无序流源(例如generate(IntSupplier))或通过BaseStream.unordered()去除排序约束可能会显著加快并行流水线中dropWhile()的速度,如果您的情况允许。如果需要与遇到顺序一致,并且在并行流水线中使用dropWhile()时遇到性能或内存利用问题,则切换到使用BaseStream.sequential()进行顺序执行可能会提高性能。
      实现要求:
      默认实现获取此流的spliterator,包装该spliterator以支持遍历此操作的语义,并返回与包装的spliterator关联的新流。返回的流保留此流的执行特性(即根据BaseStream.isParallel()的并行或顺序执行),但包装的spliterator可能选择不支持拆分。当关闭返回的流时,将调用返回流和此流的关闭处理程序。
      参数:
      predicate - 一个非干扰无状态的谓词,用于应用于元素以确定最长前缀的元素。
      返回:
      新流
      自版本:
      9
    • forEach

      void forEach(IntConsumer action)
      对此流的每个元素执行操作。

      这是一个终端操作

      对于并行流水线,此操作不保证遵守流的遇到顺序,因为这样做将牺牲并行性的好处。对于任何给定元素,操作可以在库选择的任何时间和任何线程中执行。如果操作访问共享状态,则负责提供所需的同步。

      参数:
      action - 一个非干扰操作,用于对元素执行操作
    • forEachOrdered

      void forEachOrdered(IntConsumer action)
      对此流的每个元素执行操作,确保对具有定义的遇到顺序的流中的每个元素按顺序处理。

      这是一个终端操作

      参数:
      action - 一个非干扰操作,用于对元素执行操作
      参见:
    • toArray

      int[] toArray()
      返回包含此流的元素的数组。

      这是一个终端操作

      返回:
      包含此流的元素的数组
    • reduce

      int reduce(int identity, IntBinaryOperator op)
      对此流的元素执行归约,使用提供的身份值和一个关联累积函数,并返回减少后的值。这等效于:
      
           int result = identity;
           for (int element : this stream)
               result = accumulator.applyAsInt(result, element)
           return result;
       
      但不受限于顺序执行。

      identity值必须是累加函数的身份。这意味着对于所有xaccumulator.apply(identity, x)等于x。累加函数必须是一个关联函数。

      这是一个终端操作

      API注释:
      求和、最小值和最大值都是可以使用此方法表达的归约的特殊情况。例如,对流求和可以表示为:
      
           int sum = integers.reduce(0, (a, b) -> a+b);
       
      或更简洁地:
      
           int sum = integers.reduce(0, Integer::sum);
       

      虽然这可能看起来比在循环中简单地改变运行总和更为迂回,但归约操作更优雅地并行化,无需额外的同步,并大大减少了数据竞争的风险。

      参数:
      identity - 累加函数的身份值
      op - 一个关联非干扰无状态的函数,用于组合两个值
      返回:
      归约的结果
      参见:
    • reduce

      对此流的元素执行归约,使用一个关联累积函数,并返回描述减少值的OptionalInt,如果有的话。这等效于:
      
           boolean foundAny = false;
           int result = null;
           for (int element : this stream) {
               if (!foundAny) {
                   foundAny = true;
                   result = element;
               }
               else
                   result = accumulator.applyAsInt(result, element);
           }
           return foundAny ? OptionalInt.of(result) : OptionalInt.empty();
       
      但不受限于顺序执行。

      累加函数必须是一个关联函数。

      这是一个终端操作

      参数:
      op - 一个关联非干扰无状态的函数,用于组合两个值
      返回:
      归约的结果
      参见:
    • collect

      <R> R collect(Supplier<R> supplier, ObjIntConsumer<R> accumulator, BiConsumer<R,R> combiner)
      执行此流的元素上的可变减少操作。可变减少是指减少值是可变结果容器(例如ArrayList)的一种情况,并且元素通过更新结果的状态而不是替换结果来合并。这会产生一个等效于:
      
           R result = supplier.get();
           for (int element : this stream)
               accumulator.accept(result, element);
           return result;
       

      reduce(int, IntBinaryOperator)类似,collect操作可以并行化,而无需额外的同步。

      这是一个终端操作

      类型参数:
      R - 可变结果容器的类型
      参数:
      supplier - 创建新的可变结果容器的函数。对于并行执行,此函数可能会被多次调用,并且必须每次返回一个新值。
      accumulator - 一个关联非干扰无状态函数,必须将一个元素合并到结果容器中。
      combiner - 一个关联非干扰无状态函数,接受两个部分结果容器并合并它们,必须与累加器函数兼容。组合器函数必须将第二个结果容器中的元素合并到第一个结果容器中。
      返回:
      减少的结果
      另请参见:
    • sum

      int sum()
      返回此流中元素的总和。这是一个减少的特殊情况,等效于:
      
           return reduce(0, Integer::sum);
       

      这是一个终端操作

      返回:
      此流中元素的总和
    • min

      OptionalInt min()
      返回描述此流的最小元素的OptionalInt,如果此流为空则返回一个空的可选项。这是一个减少的特殊情况,等效于:
      
           return reduce(Integer::min);
       

      这是一个终端操作

      返回:
      包含此流的最小元素的OptionalInt,如果流为空则返回一个空的OptionalInt
    • max

      OptionalInt max()
      返回描述此流的最大元素的OptionalInt,如果此流为空则返回一个空的可选项。这是一个减少的特殊情况,等效于:
      
           return reduce(Integer::max);
       

      这是一个终端操作

      返回:
      包含此流的最大元素的OptionalInt,如果流为空则返回一个空的OptionalInt
    • count

      long count()
      返回此流中元素的计数。这是一个减少的特殊情况,等效于:
      
           return mapToLong(e -> 1L).sum();
       

      这是一个终端操作

      API 注意:
      如果能够直接从流源计算计数,则实现可能选择不执行流管道(顺序或并行)。在这种情况下,不会遍历任何源元素,也不会评估任何中间操作。具有副作用的行为参数(除了像调试这样的无害情况)可能会受到影响。例如,考虑以下流:
      
           IntStream s = IntStream.of(1, 2, 3, 4);
           long count = s.peek(System.out::println).count();
       
      流源涵盖的元素数量是已知的,中间操作peek不会向流注入或移除元素(这可能是flatMapfilter操作的情况)。因此,计数为4,不需要执行管道,并且作为副作用打印出元素。
      返回:
      此流中元素的计数
    • average

      OptionalDouble average()
      返回描述此流中元素的算术平均值的OptionalDouble,如果此流为空则返回一个空的可选项。这是一个减少的特殊情况。

      这是一个终端操作

      返回:
      包含此流的平均元素的OptionalDouble,如果流为空则返回一个空的可选项
    • summaryStatistics

      IntSummaryStatistics summaryStatistics()
      返回描述此流中元素的各种摘要数据的IntSummaryStatistics。这是一个减少的特殊情况。

      这是一个终端操作

      返回:
      描述此流中元素的各种摘要数据的IntSummaryStatistics
    • anyMatch

      boolean anyMatch(IntPredicate predicate)
      返回此流的任何元素是否与提供的谓词匹配。如果不需要确定结果,则可能不会对所有元素评估谓词。如果流为空,则返回false,并且不会评估谓词。

      这是一个短路终端操作

      API 注意:
      此方法评估流的元素上的谓词的存在量化(对于某个 x P(x))。
      参数:
      predicate - 一个非干扰无状态的谓词,应用于此流的元素
      返回:
      如果流的任何元素与提供的谓词匹配,则为true,否则为false
    • allMatch

      boolean allMatch(IntPredicate predicate)
      返回此流的所有元素是否与提供的谓词匹配。如果不需要确定结果,则可能不会对所有元素评估谓词。如果流为空,则返回true,并且不会评估谓词。

      这是一个短路终端操作

      API 注意:
      此方法评估流的元素上的谓词的全称量化(对于所有 x P(x))。如果流为空,则量化被认为是虚假满足,并且始终为true(不考虑 P(x))。
      参数:
      predicate - 一个非干扰无状态的谓词,应用于此流的元素
      返回:
      如果流的所有元素都与提供的谓词匹配,或者流为空,则为true,否则为false
    • noneMatch

      boolean noneMatch(IntPredicate predicate)
      返回此流的任何元素是否与提供的谓词不匹配。如果不需要确定结果,则可能不会对所有元素评估谓词。如果流为空,则返回true,并且不会评估谓词。

      这是一个短路终端操作

      API 注意:
      此方法评估流的元素上的否定谓词的全称量化(对于所有 x ~P(x))。如果流为空,则量化被认为是虚假满足,并且始终为true,不考虑 P(x)。
      参数:
      predicate - 一个非干扰无状态的谓词,应用于此流的元素
      返回:
      如果流的任何元素与提供的谓词不匹配,或者流为空,则为true,否则为false
    • findFirst

      OptionalInt findFirst()
      返回描述此流的第一个元素的OptionalInt,如果流为空则返回一个空的OptionalInt。如果流没有遇到顺序,则可能返回任何元素。

      这是一个短路终端操作

      返回:
      描述此流的第一个元素的OptionalInt,如果流为空则返回一个空的OptionalInt
    • findAny

      OptionalInt findAny()
      返回描述此流的某个元素的OptionalInt,如果流为空则返回一个空的OptionalInt

      这是一个短路终端操作

      此操作的行为明确是不确定的;它可以自由选择流中的任何元素。这是为了在并行操作中获得最大性能;代价是对相同源的多次调用可能不会返回相同的结果。(如果需要稳定的结果,请改用findFirst()。)

      返回:
      描述此流的某个元素的OptionalInt,如果流为空则返回一个空的OptionalInt
      另请参见:
    • asLongStream

      LongStream asLongStream()
      返回由此流的元素组成的LongStream,转换为long

      这是一个中间操作

      返回:
      由此流的元素组成的LongStream,转换为long
    • asDoubleStream

      DoubleStream asDoubleStream()
      返回由此流的元素组成的DoubleStream,转换为double

      这是一个中间操作

      返回值:
      由此流的元素组成的DoubleStream,转换为double
    • boxed

      Stream<Integer> boxed()
      返回一个由此流的元素组成的Stream,每个元素都装箱为Integer

      这是一个中间操作

      返回值:
      由此流的元素组成的Stream,每个元素都装箱为Integer
    • builder

      static IntStream.Builder builder()
      返回一个IntStream的构建器。
      返回值:
      一个流构建器
    • empty

      static IntStream empty()
      返回一个空的顺序IntStream
      返回值:
      一个空的顺序流
    • of

      static IntStream of(int t)
      返回一个包含单个元素的顺序IntStream
      参数:
      t - 单个元素
      返回值:
      一个单例顺序流
    • of

      static IntStream of(int... values)
      返回一个顺序有序流,其元素是指定值。
      参数:
      values - 新流的元素
      返回值:
      新流
    • iterate

      static IntStream iterate(int seed, IntUnaryOperator f)
      返回一个无限顺序有序的IntStream,通过将函数f迭代应用于初始元素seed而生成,产生一个由seedf(seed)f(f(seed))等组成的Stream

      IntStream的第一个元素(位置0)将是提供的seed。对于n > 0,位置n的元素将是将函数f应用于位置n - 1的元素的结果。

      对一个元素应用f的操作在对后续元素应用f的操作之前发生。对于给定的元素,操作可以在库选择的任何线程中执行。

      参数:
      seed - 初始元素
      f - 应用于前一个元素以产生新元素的函数
      返回值:
      一个新的顺序IntStream
    • iterate

      static IntStream iterate(int seed, IntPredicate hasNext, IntUnaryOperator next)
      返回一个顺序有序的IntStream,通过将给定的next函数迭代应用于初始元素而生成,条件是满足给定的hasNext谓词。流在hasNext谓词返回false时终止。

      IntStream.iterate应该产生与相应的for循环产生的元素序列相同的元素序列:

      
           for (int index=seed; hasNext.test(index); index = next.applyAsInt(index)) {
               ...
           }
       

      如果hasNext谓词在种子值上不成立,则生成的序列可能为空。否则,第一个元素将是提供的seed值,下一个元素(如果存在)将是将next函数应用于seed值的结果,依此类推,直到hasNext谓词指示流应终止。

      hasNext谓词应用于一个元素的操作在将next函数应用于该元素之前发生。将next函数应用于一个元素的操作在将hasNext谓词应用于后续元素之前发生。对于给定的元素,操作可以在库选择的任何线程中执行。

      参数:
      seed - 初始元素
      hasNext - 应用于元素以确定流何时终止的谓词
      next - 应用于前一个元素以产生新元素的函数
      返回值:
      一个新的顺序IntStream
      自Java版本:
      9
    • generate

      static IntStream generate(IntSupplier s)
      返回一个无限顺序无序流,其中每个元素由提供的IntSupplier生成。适用于生成常量流、随机元素流等。
      参数:
      s - 生成元素的IntSupplier
      返回值:
      一个新的无限顺序无序IntStream
    • range

      static IntStream range(int startInclusive, int endExclusive)
      返回一个顺序有序的IntStream,从startInclusive(包含)到endExclusive(不包含),步长为1
      API注释:

      可以使用for循环按顺序生成等价的递增值序列,如下所示:

      
           for (int i = startInclusive; i < endExclusive ; i++) { ... }
       
      参数:
      startInclusive - (包含)的初始值
      endExclusive - 排除的上限
      返回值:
      一个int元素范围的顺序IntStream
    • rangeClosed

      static IntStream rangeClosed(int startInclusive, int endInclusive)
      返回一个顺序有序的IntStream,从startInclusive(包含)到endInclusive(包含),步长为1
      API注释:

      可以使用for循环按顺序生成等价的递增值序列,如下所示:

      
           for (int i = startInclusive; i <= endInclusive ; i++) { ... }
       
      参数:
      startInclusive - (包含)的初始值
      endInclusive - 包含的上限
      返回值:
      一个int元素范围的顺序IntStream
    • concat

      static IntStream concat(IntStream a, IntStream b)
      创建一个惰性连接的流,其元素是第一个流的所有元素,后跟第二个流的所有元素。如果两个输入流都是有序的,则生成的流是有序的,如果其中一个输入流是并行的,则生成的流是并行的。当关闭生成的流时,会调用两个输入流的关闭处理程序。

      此方法操作两个输入流,并将每个流绑定到其源。因此,对输入流源的后续修改可能不会反映在连接的流结果中。

      API注释:
      为了保留优化机会,此方法将每个流绑定到其源,并仅接受两个流作为参数。例如,如果已知每个输入流源的确切大小,则可以计算连接流源的确切大小。要连接更多流而不绑定,或者不使用此方法的嵌套调用,请尝试创建流的流并使用恒等函数进行扁平映射,例如:
      
           IntStream concat = Stream.of(s1, s2, s3, s4).flatMapToInt(s -> s);
       
      实现注释:
      在从重复连接构造流时要小心。访问深度连接流的元素可能导致深度调用链,甚至StackOverflowError
      参数:
      a - 第一个流
      b - 第二个流
      返回值:
      两个输入流的连接