int
原始的专业化 Stream
。 以下示例说明使用 Stream
和IntStream
计算红色小部件权重的总和的聚合操作:
int sum = widgets.stream()
.filter(w -> w.getColor() == RED)
.mapToInt(w -> w.getWeight())
.sum();
请参阅类文档Stream
和用于包文档java.util.stream为流的附加说明书中,流操作,流管道,和平行度。Stream
, java.util.stream
static interface
IntStream.Builder
IntStream
。
boolean
allMatch(IntPredicate predicate)
boolean
anyMatch(IntPredicate predicate)
DoubleStream
asDoubleStream()
DoubleStream
该流的元素组成的转换为
double
。
LongStream
asLongStream()
LongStream
该流的元素组成的转换为
long
。
OptionalDouble
average()
OptionalDouble
描述此流的元素的算术平均值,如果此流为空,则返回空值。
Stream
boxed()
Stream
由此流的元素组成的,每个元素包含一个
Integer
。
static IntStream.Builder
builder()
IntStream
。
R
collect(Supplier supplier, ObjIntConsumer accumulator, BiConsumer combiner)
static IntStream
concat(IntStream a, IntStream b)
long
count()
IntStream
distinct()
static IntStream
empty()
IntStream
。
IntStream
filter(IntPredicate predicate)
OptionalInt
findAny()
OptionalInt
流的某些元素,
OptionalInt
如果流为空,则返回空。
OptionalInt
findFirst()
OptionalInt
描述此流的第一个元素,
OptionalInt
如果流为空,则返回一个空。
IntStream
flatMap(IntFunction extends IntStream> mapper)
void
forEach(IntConsumer action)
void
forEachOrdered(IntConsumer action)
static IntStream
generate(IntSupplier s)
IntSupplier
。
static IntStream
iterate(int seed, IntUnaryOperator f)
IntStream
通过函数的迭代应用产生
f
为初始元素
seed
,产生
Stream
包括
seed
,
f(seed)
,
f(f(seed))
,等。
PrimitiveIterator.OfInt
iterator()
IntStream
limit(long maxSize)
maxSize
长度。
IntStream
map(IntUnaryOperator mapper)
DoubleStream
mapToDouble(IntToDoubleFunction mapper)
DoubleStream
由给定函数应用于此流的元素的结果。
LongStream
mapToLong(IntToLongFunction mapper)
LongStream
由给定函数应用于此流的元素的结果。
Stream
mapToObj(IntFunction extends U> mapper)
Stream
,其中包含将给定函数应用于此流的元素的结果。
OptionalInt
max()
OptionalInt
描述此流的最大元素,如果此流为空,则返回空可选项。
OptionalInt
min()
OptionalInt
描述此流的最小元素,如果此流为空,则返回空可选项。
boolean
noneMatch(IntPredicate predicate)
static IntStream
of(int... values)
static IntStream
of(int t)
IntStream
单个元素的顺序。
IntStream
parallel()
IntStream
peek(IntConsumer action)
static IntStream
range(int startInclusive, int endExclusive)
IntStream
从
startInclusive
(包括)到
endExclusive
(排除)的顺序排列
1
。
static IntStream
rangeClosed(int startInclusive, int endInclusive)
IntStream
从
startInclusive
(包括)到
endInclusive
(包括)的顺序排列
1
。
OptionalInt
reduce(IntBinaryOperator op)
OptionalInt
描述该减小值,如果有的话。
int
reduce(int identity, IntBinaryOperator op)
IntStream
sequential()
IntStream
skip(long n)
n
元素后,返回由该流的剩余元素组成的流。
IntStream
sorted()
Spliterator.OfInt
spliterator()
int
sum()
IntSummaryStatistics
summaryStatistics()
IntSummaryStatistics
描述有关此流的元素的各种摘要数据。
int[]
toArray()
close, isParallel, onClose, unordered
这是一个中间操作。
predicate
-一个 非干扰, 无国籍 谓词应用到每个元素,以确定是否它应包含
这是一个中间操作。
mapper
- 一个 无干扰的, 无状态的 功能,适用于每个元素
Stream
,其中包含将给定函数应用于此流的元素的结果。 这是一个 中间操作。
U
- 新流的元素类型
mapper
- 一个 无干扰的, 无状态的 功能,适用于每个元素
LongStream
由给定函数应用于此流的元素的结果。 这是一个中间操作。
mapper
- 一个 无干扰的, 无状态的 功能,适用于每个元素
DoubleStream
由给定函数应用于此流的元素的结果。 这是一个中间操作。
mapper
- 一个 无干扰的, 无状态的 功能,适用于每个元素
closed
在其内容已经被放入此流之后。(如果使用映射的流是null
空的流)。 这是一个中间操作。
mapper
-一个 非干扰, 无状态 功能应用到其中产生的每个元素
IntStream
的新值的
Stream.flatMap(Function)
这是一个有状态的中间操作。
这是一个有状态的中间操作。
这是一个中间操作。
对于并行流管线,可以在上游操作的任何时间和任何线程中调用该元素可用的动作。如果操作修改共享状态,则负责提供所需的同步。
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();
action
- 在流中消耗的元素上执行的 非干扰操作
maxSize
长度。 这是一个短暂的有状态的中间操作。
limit()
在顺序流管线上通常是一种便宜的操作,但是在有序的并行管道上可能是相当昂贵的,特别是对于大的值
maxSize
,因为
limit(n)
限制不仅返回任何
n个元素,而且 返回遇到顺序中的
前n个元素。如果您的情况允许,使用无序流源(如
generate(IntSupplier)
)或删除排序约束
BaseStream.unordered()
可能会导致
limit()
并行流水线的显着加速。如果需要与遇到顺序一致,并且
limit()
在并行管道中遇到较差的性能或内存 利用率,则切换到顺序执行
sequential()
可能会提高性能。
maxSize
- 流应该限制的元素数量
IllegalArgumentException
- 如果
maxSize
是否定的
n
元素后,返回由该流的剩余元素组成的流。如果此流包含少于n
元素,则将返回空流。 这是一个有状态的中间操作。
skip()
通常是顺序流管线上的廉价操作,但在有序的并行管道上可能是相当昂贵的,特别是对于大值
n
,因为
skip(n)
被限制为不仅跳过任何
n个元素,而且 跳过遇到次序中的
前n个元素。如果您的情况允许,使用无序流源(如
generate(IntSupplier)
)或删除排序约束
BaseStream.unordered()
可能会导致
skip()
并行流水线的显着加速。如果需要与遇到顺序一致,并且
skip()
在并行管道中遇到较差的性能或内存 利用率,则切换到顺序执行
sequential()
可能会提高性能。
n
- 要跳过的主要元素的数量
IllegalArgumentException
- 如果
n
是否定的
这是一个终端操作。
对于并行流管道,此操作不能 保证遵守流的遇到顺序,因为这样做会牺牲并行性的好处。对于任何给定的元素,动作可以在图书馆选择的任何时间和任何线索中执行。如果操作访问共享状态,则负责提供所需的同步。
action
- 对元素执行 不干扰的行为
这是一个终端操作。
action
- 对元素执行 不干扰的行为
forEach(IntConsumer)
这是一个终端操作。
int result = identity;
for (int element : this stream)
result = accumulator.applyAsInt(result, element)
return result;
但不限于顺序执行。 该identity
值必须是累加器函数的标识。这意味着对于所有人x
来说 accumulator.apply(identity, x)
,等于x
。该accumulator
函数必须是 关联函数。
这是一个终端操作。
int sum = integers.reduce(0, (a, b) -> a+b);
或更紧凑:
int sum = integers.reduce(0, Integer::sum);
尽管与简单地将循环中的总体变量相比,这可能看起来更为迂回的方式进行,但减少操作更平稳地并行化,而不需要额外的同步,并大大降低了数据竞争的风险。
identity
- 积累函数的身份值
op
-一个 关联, 无干扰, 无状态 的组合两个值函数
sum()
,
min()
,
max()
,
average()
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();
但不限于顺序执行。 该accumulator
函数必须是 关联函数。
这是一个终端操作。
op
-一个 关联, 无干扰, 无状态 的组合两个值函数
reduce(int, IntBinaryOperator)
ArrayList
通过更新结果的状态而不是通过替换结果来合并元素。这产生的结果相当于:
R result = supplier.get();
for (int element : this stream)
accumulator.accept(result, element);
return result;
像这样reduce(int, IntBinaryOperator)
,collect
操作可以并行化,而不需要额外的同步。
这是一个终端操作。
R
- 结果的类型
supplier
- 创建新结果容器的函数。对于并行执行,可以多次调用此函数,并且每次都必须返回一个新的值。
accumulator
-一个 缔合, 非干扰性, 无状态 用于将一个额外的元件到结果函数
combiner
-一个 缔合, 非干扰, 无状态 功能用于组合两个值,它必须与蓄能器功能兼容
Stream.collect(Supplier, BiConsumer, BiConsumer)
return reduce(0, Integer::sum);
这是一个终端操作。
OptionalInt
描述此流的最小元素,如果此流为空,则返回空可选项。这是减少的特殊情况, 相当于:
return reduce(Integer::min);
这是一个终端操作。
OptionalInt
包含此流的最小元素,
OptionalInt
如果流为空,则为空
OptionalInt
描述此流的最大元素,如果此流为空,则返回空可选项。这是减少的特殊情况, 相当于:
return reduce(Integer::max);
这是一个终端操作。
OptionalInt
此流的最大元素,
OptionalInt
如果流为空,则为空
return mapToLong(e -> 1L).sum();
这是一个终端操作。
OptionalDouble
描述此流的元素的算术平均值,如果此流为空,则返回空值。这是减少的一个 特例。 这是一个终端操作。
OptionalDouble
包含此流的平均元素,如果流为空,则为空可选
IntSummaryStatistics
描述有关此流的元素的各种摘要数据。这是减少的一个特例。 这是一个终端操作。
IntSummaryStatistics
有关此流中的元素描述各种摘要数据
false
则返回并且不评估谓词。 这是一个短路终端操作。
predicate
-一个 无干扰, 无状态的 断言适用于该流的元素
true
如果流的任何元素与提供的谓词匹配,否则
false
true
则返回并且不评估谓词。 这是一个短路终端操作。
true
(不管的P(X))。
predicate
-一个 无干扰, 无状态的 断言适用于该流的元素
true
如果流的所有元素与提供的谓词匹配,否则流为空,否则
false
true
则返回并且不评估谓词。 这是一个短路终端操作。
true
与P(x)无关。
predicate
-一个 无干扰, 无状态的 断言适用于该流的元素
true
如果流的任何元素都不匹配提供的谓词,否则流为空,否则
false
OptionalInt
描述此流的第一个元素,OptionalInt
如果流为空,则返回一个空。如果流没有遇到顺序,则可能会返回任何元素。 这是一个短路终端操作。
OptionalInt
描述该流的第一个元素,或空
OptionalInt
如果流是空
OptionalInt
流的某些元素,OptionalInt
如果流为空,则返回空。 这是一个短路终端操作。
这个操作的行为显然是不确定的; 可以自由选择流中的任何元素。这是为了允许并行操作中的最大性能; 成本是同一来源上的多次调用可能不会返回相同的结果。(如果需要稳定的结果,请findFirst()
改用。)
OptionalInt
描述该流的某些元件,或者一个空
OptionalInt
如果流是空
findFirst()
LongStream
该流的元素组成的转换为long
。 这是一个中间操作。
LongStream
由这个流的元素组成,转换为
long
DoubleStream
该流的元素组成的转换为double
。 这是一个中间操作。
DoubleStream
由这个流的元素组成,转换为
double
Stream
由此流的元素组成的,每个元素包含一个Integer
。 这是一个中间操作。
Stream
一致的此流的元件,每个盒装到
Integer
BaseStream
这是一个中间操作。
sequential
在界面
BaseStream
BaseStream
这是一个中间操作。
parallel
在界面
BaseStream
BaseStream
这是一个终端操作。
iterator
在界面
BaseStream
BaseStream
这是一个终端操作。
spliterator
在界面
BaseStream
IntStream
。IntStream
。IntStream
单个元素的顺序。t
- 单一元素
values
- 新流的元素
IntStream
通过函数的迭代应用产生f
为初始元素seed
,产生Stream
包括seed
,f(seed)
, f(f(seed))
,等。 第一个元素(位置0
)IntStream
将被提供seed
。因为n > 0
,位置上的元素 n
将是将函数f
应用于位置上的元素的结果n - 1
。
seed
- 初始元素
f
- 要应用于上一个元素以生成新元素的函数
IntStream
IntSupplier
。这适合于产生恒定流,随机元素流等s
-
IntSupplier
用于生成的元素
IntStream
IntStream
从startInclusive
(包括)到endExclusive
(排除)的顺序排列 1
。可以使用for
循环如下顺序地产生递增值的等效序列:
for (int i = startInclusive; i < endExclusive ; i++) { ... }
startInclusive
- (含)初始值
endExclusive
- 专属上限
IntStream
为的范围内
int
的元件
IntStream
从startInclusive
(包括)到endInclusive
(包括)的顺序排列 1
。可以使用for
循环如下顺序地产生递增值的等效序列:
for (int i = startInclusive; i <= endInclusive ; i++) { ... }
startInclusive
- (含)初始值
endInclusive
- 包容上限
IntStream
为的范围内
int
的元件
StackOverflowException
。
a
- 第一流
b
- 第二流