public interface DoubleStream extends BaseStream<Double,DoubleStream>
double
原始专长Stream
。
以下示例说明使用Stream
和DoubleStream
进行的聚合 操作 ,计算红色小部件的权重之和:
double sum = widgets.stream() .filter(w -> w.getColor() == RED) .mapToDouble(w -> w.getWeight()) .sum();
请参阅类文档Stream
和用于包文档java.util.stream为流的附加说明书中,流操作,流管道,和平行度。
Stream
, java.util.stream
Modifier and Type | Interface and Description |
---|---|
static interface |
DoubleStream.Builder
DoubleStream 可变构建器。
|
Modifier and Type | Method and Description |
---|---|
boolean |
allMatch(DoublePredicate predicate)
返回此流的所有元素是否与提供的谓词匹配。
|
boolean |
anyMatch(DoublePredicate predicate)
返回此流的任何元素是否与提供的谓词匹配。
|
OptionalDouble |
average()
返回
OptionalDouble 此流的元素的算术平均值的OptionalDouble,如果此流为空,则返回一个空的可选项。
|
Stream<Double> |
boxed()
返回一个
Stream 组成的这个流的元素,装箱到
Double 。
|
static DoubleStream.Builder |
builder()
返回一个
DoubleStream 的生成器。
|
<R> R |
collect(Supplier<R> supplier, ObjDoubleConsumer<R> accumulator, BiConsumer<R,R> combiner)
对此流的元素执行
mutable reduction操作。
|
static DoubleStream |
concat(DoubleStream a, DoubleStream b)
创建一个懒惰连接的流,其元素是第一个流的所有元素,后跟第二个流的所有元素。
|
long |
count()
返回此流中的元素数。
|
DoubleStream |
distinct()
返回由该流的不同元素组成的流。
|
static DoubleStream |
empty()
返回一个空的顺序
DoubleStream 。
|
DoubleStream |
filter(DoublePredicate predicate)
返回由与此给定谓词匹配的此流的元素组成的流。
|
OptionalDouble |
findAny()
返回描述流的一些元素的 OptionalDouble 如果流为空,则返回一个空的OptionalDouble 。
|
OptionalDouble |
findFirst()
返回描述此流的第一个元素的 OptionalDouble 如果流为空,则返回一个空的OptionalDouble 。
|
DoubleStream |
flatMap(DoubleFunction<? extends DoubleStream> mapper)
返回由通过将提供的映射函数应用于每个元素而产生的映射流的内容来替换该流的每个元素的结果的流。
|
void |
forEach(DoubleConsumer action)
对此流的每个元素执行操作。
|
void |
forEachOrdered(DoubleConsumer action)
对此流的每个元素执行一个操作,保证每个元素按遇到顺序处理,以便具有定义的遇到顺序的流。
|
static DoubleStream |
generate(DoubleSupplier s)
返回无限顺序无序流,其中每个元素由提供的
DoubleSupplier 。
|
static DoubleStream |
iterate(double seed, DoubleUnaryOperator f)
返回有序无限连续
DoubleStream 由函数的迭代应用产生
f 至初始元素
seed ,产生
Stream 包括
seed ,
f(seed) ,
f(f(seed)) ,等
|
PrimitiveIterator.OfDouble |
iterator()
返回此流的元素的迭代器。
|
DoubleStream |
limit(long maxSize)
返回由此流的元素组成的流,截断长度不能超过
maxSize 。
|
DoubleStream |
map(DoubleUnaryOperator mapper)
返回由给定函数应用于此流的元素的结果组成的流。
|
IntStream |
mapToInt(DoubleToIntFunction mapper)
返回一个
IntStream ,其中包含将给定函数应用于此流的元素的结果。
|
LongStream |
mapToLong(DoubleToLongFunction mapper)
返回一个
LongStream ,其中包含将给定函数应用于此流的元素的结果。
|
<U> Stream<U> |
mapToObj(DoubleFunction<? extends U> mapper)
返回一个对象值
Stream ,其中包含将给定函数应用于此流的元素的结果。
|
OptionalDouble |
max()
返回
OptionalDouble 此流的最大元素的OptionalDouble,如果此流为空,则返回空的OptionalDouble。
|
OptionalDouble |
min()
返回
OptionalDouble 此流的最小元素的OptionalDouble,如果此流为空,则返回空的OptionalDouble。
|
boolean |
noneMatch(DoublePredicate predicate)
返回此流的元素是否与提供的谓词匹配。
|
static DoubleStream |
of(double... values)
返回其元素是指定值的顺序排序流。
|
static DoubleStream |
of(double t)
返回包含单个元素的顺序
DoubleStream 。
|
DoubleStream |
parallel()
返回平行的等效流。
|
DoubleStream |
peek(DoubleConsumer action)
返回由该流的元素组成的流,另外在从生成的流中消耗元素时对每个元素执行提供的操作。
|
OptionalDouble |
reduce(DoubleBinaryOperator op)
|
double |
reduce(double identity, DoubleBinaryOperator op)
使用提供的身份值和
associative累积功能对此流的元素执行
reduction ,并返回减小的值。
|
DoubleStream |
sequential()
返回顺序的等效流。
|
DoubleStream |
skip(long n)
在丢弃流的第一个
n 元素之后,返回由该流的
n 元素组成的流。
|
DoubleStream |
sorted()
以排序顺序返回由该流的元素组成的流。
|
Spliterator.OfDouble |
spliterator()
返回此流的元素的拼接器。
|
double |
sum()
返回此流中元素的总和。
|
DoubleSummaryStatistics |
summaryStatistics()
返回一个
DoubleSummaryStatistics 描述有关此流的元素的各种摘要数据。
|
double[] |
toArray()
返回一个包含此流的元素的数组。
|
close, isParallel, onClose, unordered
DoubleStream filter(DoublePredicate predicate)
这是一个intermediate operation 。
predicate
- 一个
non-interfering,stateless
谓词适用于每个元素,以确定是否应包括
DoubleStream map(DoubleUnaryOperator mapper)
这是一个intermediate operation 。
mapper
-一个
non-interfering ,
stateless函数应用到每个元件
<U> Stream<U> mapToObj(DoubleFunction<? extends U> mapper)
Stream
,其中包含将给定函数应用于此流的元素的结果。
这是一个intermediate operation 。
U
- 新流的元素类型
mapper
-一个
non-interfering ,
stateless函数应用到每个元件
IntStream mapToInt(DoubleToIntFunction mapper)
IntStream
,其中包含将给定函数应用于此流的元素的结果。
这是一个intermediate operation 。
mapper
-一个
non-interfering ,
stateless函数应用到每个元件
LongStream mapToLong(DoubleToLongFunction mapper)
LongStream
,其中包含将给定函数应用于此流的元素的结果。
这是一个intermediate operation 。
mapper
-一个
non-interfering ,
stateless函数应用到每个元件
DoubleStream flatMap(DoubleFunction<? extends DoubleStream> mapper)
closed
。
(如果映射的流为null
则使用空的流。)
这是一个intermediate operation 。
mapper
-一个
non-interfering ,
stateless功能应用到其产生的每个元素
DoubleStream
新值的
Stream.flatMap(Function)
DoubleStream distinct()
DoubleStream sorted()
DoubleStream peek(DoubleConsumer action)
这是一个intermediate operation 。
对于并行流管线,可以在上游操作的任何时间和任何线程中调用该元素可用的动作。 如果操作修改共享状态,则负责提供所需的同步。
DoubleStream.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
- 一个
non-interfering对元素执行的操作,因为它们从流中消耗
DoubleStream limit(long maxSize)
maxSize
。
limit()
通常是在连续的流管道的廉价的操作,它可以是订购的并行管线相当昂贵的,特别是对于大的值maxSize
,由于limit(n)
被约束返回不是任何n个元素,但在遭遇顺序中的第n个元素。
使用无序流源(如generate(DoubleSupplier)
)或去除所述排序约束与BaseStream.unordered()
可导致显著加速比limit()
在并行管线,如果情况许可的语义。
如果具有遭遇顺序的一致性是必须的,并且遇到性能或存储器利用率差与limit()
在并行管线,在切换到的顺序执行与sequential()
可以提高性能。
maxSize
- 流应该限制的元素数量
IllegalArgumentException
- 如果
maxSize
为负数
DoubleStream skip(long n)
skip()
通常是在连续的流管道的廉价的操作,它可以是订购的并行管线相当昂贵的,特别是对于大的值n
,由于skip(n)
被约束为跳过不是任何n个元素,但在遭遇顺序中的第n个元素。
使用无序流源(如generate(DoubleSupplier)
)或去除所述排序约束与BaseStream.unordered()
可导致显著加速比skip()
在并行管线,如果情况许可的语义。
如果具有遭遇顺序的一致性是必须的,并且遇到性能或存储器利用率差与skip()
在并行管线,在切换到的顺序执行与sequential()
可以提高性能。
n
- 要跳过的主要元素的数量
IllegalArgumentException
- 如果
n
为负数
void forEach(DoubleConsumer action)
这是一个terminal operation 。
对于并行流管道,此操作不保证遵守流的遇到顺序,因为这样做将牺牲并行性的好处。 对于任何给定的元素,动作可以在图书馆选择的任何时间和任何线索中执行。 如果操作访问共享状态,则负责提供所需的同步。
action
- 一个
non-interfering对元素执行的操作
void forEachOrdered(DoubleConsumer action)
这是一个terminal operation 。
action
- 一个
non-interfering对元素执行的操作
forEach(DoubleConsumer)
double[] toArray()
这是一个terminal operation 。
double reduce(double identity, DoubleBinaryOperator op)
double result = identity; for (double element : this stream) result = accumulator.applyAsDouble(result, element) return result;
但不限于顺序执行。
identity
值必须是累加器函数的标识。 这意味着,对于所有x
, accumulator.apply(identity, x)
等于x
。 accumulator
功能必须是associative功能。
这是一个terminal operation 。
double sum = numbers.reduce(0, (a, b) -> a+b);
或更紧凑:
double sum = numbers.reduce(0, Double::sum);
尽管与简单地将循环中的总体变量相比,这可能看起来更为迂回的方式进行,但减少操作更平稳地并行化,而不需要额外的同步,并大大降低了数据竞争的风险。
identity
- 累积函数的标识值
op
-一个
associative ,
non-interfering ,
stateless功能组合两个值
sum()
,
min()
,
max()
,
average()
OptionalDouble reduce(DoubleBinaryOperator op)
OptionalDouble
(如果有)。
这相当于:
boolean foundAny = false; double result = null; for (double element : this stream) { if (!foundAny) { foundAny = true; result = element; } else result = accumulator.applyAsDouble(result, element); } return foundAny ? OptionalDouble.of(result) : OptionalDouble.empty();
但不限于顺序执行。
accumulator
功能必须是associative功能。
这是一个terminal operation 。
op
-一个
associative ,
non-interfering ,
stateless功能组合两个值
reduce(double, DoubleBinaryOperator)
<R> R collect(Supplier<R> supplier, ObjDoubleConsumer<R> accumulator, BiConsumer<R,R> combiner)
ArrayList
,并且通过更新结果的状态而不是通过替换结果来合并元素。
这产生的结果相当于:
R result = supplier.get(); for (double element : this stream) accumulator.accept(result, element); return result;
像reduce(double, DoubleBinaryOperator)
一样 , collect
操作可以并行化,而不需要额外的同步。
这是一个terminal operation 。
R
- 结果的类型
supplier
- 创建新结果容器的函数。
对于并行执行,可以多次调用此函数,并且每次都必须返回一个新的值。
accumulator
-一个
associative ,
non-interfering ,
stateless功能用于将一个额外的元件到结果
combiner
-一个
associative ,
non-interfering ,
stateless功能用于组合两个值,它必须与蓄能器功能兼容
Stream.collect(Supplier, BiConsumer, BiConsumer)
double sum()
return reduce(0, Double::sum);
然而,由于浮点求和不是精确的,所以上述代码不一定等于通过这种方法进行的求和计算。
如果任何流元素是NaN,或者总和在任何一点NaN,那么和将是NaN。 浮点和的值是输入值以及加法运算顺序的函数。 该方法的加法运算顺序有意未被定义为允许实现灵活性来提高计算结果的速度和精度。 特别地,该方法可以使用补偿求和或其他技术来减少相比的简单求和在数值总和结合的误差来实现double
值。
这是一个terminal operation 。
OptionalDouble min()
OptionalDouble
此流的最小元素的OptionalDouble,如果此流为空,则返回空的OptionalDouble。
如果任何流元素是NaN,最小元素将为Double.NaN
。
与数值比较运算符不同,该方法认为负零严格小于正零。
这是一个reduction的特殊情况,相当于:
return reduce(Double::min);
这是一个terminal operation 。
OptionalDouble
此流的最小元素的OptionalDouble,如果流为空,则为空可选
OptionalDouble max()
OptionalDouble
此流的最大元素的OptionalDouble,如果此流为空,则返回空的OptionalDouble。
如果任何流元素是NaN,最大元素将为Double.NaN
。
与数值比较运算符不同,该方法认为负零严格小于正零。
这是一个reduction的特殊情况,相当于:
return reduce(Double::max);
这是一个terminal operation 。
OptionalDouble
此流的最大元素的OptionalDouble,如果流为空,则为空可选
long count()
OptionalDouble average()
OptionalDouble
此流的元素的算术平均值的OptionalDouble,如果此流为空,则返回一个空的可选项。
如果任何记录的值是NaN,或者总和在任何时候,NaN则平均值将为NaN。
返回的平均值可能会根据记录值的顺序而有所不同。 该方法可以使用补偿求和或其他技术来实现,以减少用于计算平均值的numerical sum
中的误差界限。
平均值是reduction的特例 。
这是一个terminal operation 。
OptionalDouble
此流的平均元素的OptionalDouble,如果流为空,则为空可选
DoubleSummaryStatistics summaryStatistics()
DoubleSummaryStatistics
描述了关于该流的元素的各种摘要数据
boolean anyMatch(DoublePredicate predicate)
false
返回和谓语不评估。
predicate
- 一个
non-interfering,stateless
谓词适用于此流的元素
true
如果流的任何元素与提供的谓词匹配,否则为
false
boolean allMatch(DoublePredicate predicate)
true
返回和谓语不评估。
true
(不管的P(X))。
predicate
-一个
non-interfering ,
stateless谓词适用于该流的元素
true
如果流的所有元素匹配提供的谓词或流是空的,否则
false
boolean noneMatch(DoublePredicate predicate)
true
返回和谓语不评估。
true
,不管P(x)如何。
predicate
- 一个
non-interfering,stateless
谓词适用于此流的元素
true
如果流中没有元素匹配提供的谓词或流是空的,否则
false
OptionalDouble findFirst()
OptionalDouble
如果流为空,则返回一个空的OptionalDouble
。
如果流没有遇到顺序,则可能会返回任何元素。
OptionalDouble
此流的第一个元素的
OptionalDouble
如果流为空,
OptionalDouble
OptionalDouble findAny()
OptionalDouble
如果流为空,则返回一个空的OptionalDouble
。
这是一个short-circuiting terminal operation 。
这个操作的行为显然是不确定的; 可以自由选择流中的任何元素。 这是为了允许并行操作中的最大性能; 成本是同一来源上的多次调用可能不会返回相同的结果。 (如果需要稳定的结果,请改用findFirst()
)
OptionalDouble
此流的某些元素的
OptionalDouble
如果流为空,
OptionalDouble
findFirst()
Stream<Double> boxed()
Stream
由该流中的元素,盒装到的Double
。
这是一个intermediate operation 。
Stream
一致的这个流的元素,每个盒装到一个
Double
DoubleStream sequential()
BaseStream
复制
sequential
在界面
BaseStream<Double,DoubleStream>
DoubleStream parallel()
BaseStream
复制
parallel
在界面
BaseStream<Double,DoubleStream>
PrimitiveIterator.OfDouble iterator()
BaseStream
复制
这是一个terminal operation 。
iterator
在界面
BaseStream<Double,DoubleStream>
Spliterator.OfDouble spliterator()
BaseStream
复制
这是一个terminal operation 。
spliterator
在界面
BaseStream<Double,DoubleStream>
static DoubleStream.Builder builder()
DoubleStream
的生成器。
static DoubleStream empty()
DoubleStream
。
static DoubleStream of(double t)
DoubleStream
。
t
- 单一元素
static DoubleStream of(double... values)
values
- 新流的元素
static DoubleStream iterate(double seed, DoubleUnaryOperator f)
DoubleStream
由函数的迭代应用产生f
至初始元素seed
,产生Stream
包括seed
, f(seed)
, f(f(seed))
,等
第一元件(位置0
在) DoubleStream
将是提供seed
。 对于n > 0
,位置n
的元素将是将函数f
应用于位置n - 1
的元素的n - 1
。
seed
- 初始元素
f
- 要应用于上一个元素以生成新元素的函数
DoubleStream
static DoubleStream generate(DoubleSupplier s)
DoubleSupplier
。
这适合于产生恒定流,随机元素流等
s
-所述
DoubleSupplier
为生成的元素
DoubleStream
static DoubleStream concat(DoubleStream a, DoubleStream b)
StackOverflowException
。
a
- 第一个流
b
- 第二个流