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のパッケージドキュメントを参照せよ。
| 修飾子とタイプ | インタフェースと説明 |
|---|---|
static interface |
DoubleStream.Builder
DoubleStreamの可変なビルダ StreamBuilderはライフサイクルを持ち、要素を追加できる構築中段階から始まり、要素を追加できなくなる構築済段階に移行する。 |
| 修飾子とタイプ | メソッドと説明 |
|---|---|
boolean |
allMatch(DoublePredicate predicate)
このストリームの全ての要素が与えられた述語に適合するか返す。
|
boolean |
anyMatch(DoublePredicate predicate)
このストリームのある要素が与えられた述語に適合するか返す。
|
OptionalDouble |
average()
このストリームの算術平均を表す
OptionalDouble、またはこのストリームが空ならば空のOptionalDoubleいずれかの要素がNaNであるか、いずれかの時点での和がNaNである場合、平均値はNaNとなる。 |
Stream<Double> |
boxed()
このストリームの要素を
Doubleにボックス化した要素からなるStreamを返す。 |
static DoubleStream.Builder |
builder()
DoubleStreamのビルダを返す。 |
<R> R |
collect(Supplier<R> supplier,
ObjDoubleConsumer<R> accumulator,
BiConsumer<R,R> combiner)
このストリームの要素に可変的簡約を実行する。
|
static DoubleStream |
concat(DoubleStream a,
DoubleStream b)
ストリームの要素が、最初のストリームの全ての要素の後に2つ目のストリームの全ての要素を並べたような、遅延的に連結されたストリームを返す。
|
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によって生成される、逐次的な無限Streamを返す。 |
static DoubleStream |
iterate(double seed,
DoubleUnaryOperator f)
初期要素
seedに対する関数fの繰り返しの適用によって生成された無限DoubleStreamを返す。 |
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もしストリームのいずれかの要素がNaNであれば、最大要素はDouble.NaNとなる。 |
OptionalDouble |
min()
このストリームの最小要素を表す
OptionalDouble、またはこのストリームが空ならば空のOptionalDoubleもしストリームのいずれかの要素がNaNであれば、最小要素はDouble.NaNとなる。 |
boolean |
noneMatch(DoublePredicate predicate)
このストリームのどの要素も与えられた述語に適合しないか返す。
|
static DoubleStream |
of(double... values)
要素が指定された値であるような逐次的なストリームを返す。
|
static DoubleStream |
of(double t)
Returns a sequential
DoubleStream containing a single element.
|
DoubleStream |
parallel()
並列であり同等なストリームを返す。
|
DoubleStream |
peek(DoubleConsumer action)
このストリームの要素からなり、加えて結果のストリームから要素が消費されるごとにその要素にアクションを実行するストリームを返す。
|
OptionalDouble |
reduce(DoubleBinaryOperator op)
|
double |
reduce(double identity,
DoubleBinaryOperator op)
|
DoubleStream |
sequential()
逐次的であり同等なストリームを返す。
|
DoubleStream |
skip(long n)
このストリームの
n個の要素を取り除いた残りの要素からなるストリームを返す。 |
DoubleStream |
sorted()
このストリームの要素を、整列した結果からなるストリームを返す。
|
Spliterator.OfDouble |
spliterator()
このストリームの要素のスプリッテレータを返す。
|
double |
sum()
このストリームの要素の和を返す。
|
DoubleSummaryStatistics |
summaryStatistics()
このストリームの要素の各種概要情報を表す
DoubleSummaryStatisticsを返す。 |
double[] |
toArray()
このストリームの要素からなる配列を返す。
|
close, isParallel, onClose, unorderedDoubleStream filter(DoublePredicate predicate)
これは中間処理である。
DoubleStream map(DoubleUnaryOperator mapper)
これは中間処理である。
<U> Stream<U> mapToObj(DoubleFunction<? extends U> mapper)
Streamを返す。 これは中間処理である。
IntStream mapToInt(DoubleToIntFunction mapper)
IntStreamを返す。 これは中間処理である。
LongStream mapToLong(DoubleToLongFunction mapper)
LongStreamを返す。 これは中間処理である。
DoubleStream flatMap(DoubleFunction<? extends DoubleStream> mapper)
DoubleStream distinct()
Double.compare(double, double)に従って比較される。 これは状態を持つ中間処理である。
DoubleStream sorted()
Double.compare(double, double)に従って比較される。 これは状態を持つ中間処理である。
DoubleStream peek(DoubleConsumer action)
これは中間処理である。
並列ストリームパイプラインの場合、アクションは上流の処理から利用可能になった際に任意の時間と任意のスレッドで呼ばれる。もしアクションが共有状態を変更した場合、必要な同期を用意する必要がある。
DoubleStream limit(long maxSize)
maxSizeより長くならないように切り詰められたストリームを返す。 これは短絡的で状態を持つ中間処理である。
DoubleStream skip(long n)
void forEach(DoubleConsumer action)
これは末端処理である。
並列ストリームパイプラインの場合、この処理はストリームの出現順順序を尊重するとは限らない。そのようにしてしまうと並列処理の利点を犠牲にしてしまうためである。与えられた要素に対して、アクションはライブラリが選んだ任意の時間と任意のスレッドで実行される。もしアクションが共有状態を変更するならば、アクションは必要な同期処理を用意する責任を負う。
void forEachOrdered(DoubleConsumer action)
これは末端処理である。
double[] toArray()
これは末端処理である。
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関数は結合的関数である必要がある。
これは末端処理である。
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関数は結合的関数である必要がある。
これは末端処理である。
<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処理は追加の同期処理を必要とせずに並列化できる。
これは末端処理である。
double sum()
return reduce(0, Double::sum);
しかし、浮動小数点の和は正確でないため、上記のコードはこのメソッドによる和の計算と等価とは限らない。 いずれかの要素がNaNであるか、いずれかの時点での和がNaNである場合、和はNaNとなる。浮動小数点の和は入力値と加算演算子の順序の両方の関数である。このメソッドにおける加算の順序は実装が柔軟に計算結果の速度と精度を改善できるようあえて定義されていない。特に、このメソッドは補償付き和や他の技術を使って数値和の誤差の限度をdouble値の単純な和と比較して減らすように実装される場合がある。
これは末端処理である。
OptionalDouble min()
OptionalDouble max()
long count()
OptionalDouble average()
DoubleSummaryStatistics summaryStatistics()
boolean anyMatch(DoublePredicate predicate)
falseを返す。 これは短絡的で状態を持つ末端処理である。
boolean allMatch(DoublePredicate predicate)
trueを返す。 これは短絡的で状態を持つ末端処理である。
boolean noneMatch(DoublePredicate predicate)
trueを返す。 これは短絡的で状態を持つ末端処理である。
OptionalDouble findFirst()
OptionalDouble、もしくはストリームが空であれば空のOptionalDoubleを返す。このストリームが出現順順序を持たなければ任意の要素が返される場合がある。 これは短絡的で状態を持つ末端処理である。
OptionalDouble findAny()
OptionalDouble、もしくはストリームが空であれば空のOptionalDoubleを返す。 これは短絡的で状態を持つ末端処理である。
この処理の動作は明示的に非決定的であり、どの要素を選んでもよい。これにより並列実行時の性能を最大化できる。その際のコストは同じ情報源に対する複数回の呼び出しが同じ値を返さないことである(もし安定した結果を望むならば、代わりにfindFirst()を用いよ)。
Stream<Double> boxed()
DoubleStream sequential()
BaseStreamこれは中間処理である。
sequential インタフェース内 BaseStream<Double,DoubleStream>DoubleStream parallel()
BaseStreamこれは中間処理である。
parallel インタフェース内 BaseStream<Double,DoubleStream>PrimitiveIterator.OfDouble iterator()
BaseStreamこれは末端処理である。
iterator インタフェース内 BaseStream<Double,DoubleStream>Spliterator.OfDouble spliterator()
BaseStreamこれは末端処理である。
spliterator インタフェース内 BaseStream<Double,DoubleStream>static DoubleStream.Builder builder()
DoubleStreamのビルダを返す。
static DoubleStream empty()
DoubleStreamを返す。
static DoubleStream of(double t)
DoubleStream containing a single element.
static DoubleStream of(double... values)
static DoubleStream iterate(double seed, DoubleUnaryOperator f)
seedに対する関数fの繰り返しの適用によって生成された無限DoubleStreamを返す。seed, f(seed), f(f(seed))などからなるLongStreamを生成する。 DoubleStreamの最初の要素(位置0)はseedによって与えられる。n > 0に対しては、位置nの要素はfを位置n - 1の要素に適用した結果である。
static DoubleStream generate(DoubleSupplier s)
DoubleSupplierによって生成される、逐次的な無限Streamを返す。定数のストリームや乱数のストリームなどを生成するのに向いている。
static DoubleStream concat(DoubleStream a, DoubleStream b)