- すべてのスーパー・インタフェース:
AutoCloseable
,BaseStream<Double,
DoubleStream>
Stream
に対してdouble
プリミティブ特殊化を行ったものです。
次の例は、Stream
とDoubleStream
を使って赤色のウィジェットの重さの合計を計算する集計操作を示したものです。
double sum = widgets.stream()
.filter(w -> w.getColor() == RED)
.mapToDouble(w -> w.getWeight())
.sum();
ストリーム、ストリーム操作、ストリーム・パイプライン、および並列性の詳しい仕様については、Stream
のクラス・ドキュメントやjava.util.streamのパッケージ・ドキュメントを参照してください。- 導入されたバージョン:
- 1.8
- 関連項目:
-
ネストされたクラスのサマリー
ネストされたクラス修飾子と型インタフェース説明static interface
DoubleStream
の可変ビルダーです。static interface
double
値の引数およびDoubleConsumerを受け入れ、結果を返さない演算を表します。 -
メソッドのサマリー
修飾子と型メソッド説明boolean
allMatch
(DoublePredicate predicate) このストリームのすべての要素が指定された述語に一致するかどうかを返します。boolean
anyMatch
(DoublePredicate predicate) このストリームのいずれかの要素が指定された述語に一致するかどうかを返します。average()
このストリームの要素の算術平均を記述するOptionalDouble
を返します。このストリームが空の場合は空のOptionalを返します。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()
このストリームの要素の個数を返します。distinct()
このストリームの重複を除いた要素から構成されるストリームを返します。default DoubleStream
dropWhile
(DoublePredicate predicate) このストリームが順序付けされている場合、指定された述語に一致する要素の最長のプレフィクスを削除した後、このストリームの残りの要素で構成されるストリームを返します。static DoubleStream
empty()
空の順次DoubleStream
を返します。filter
(DoublePredicate predicate) このストリームの要素のうち、指定された述語に一致するものから構成されるストリームを返します。findAny()
ストリームの一部の要素を記述するOptionalDouble
を返します。ストリームが空の場合は空のOptionalDouble
を返します。このストリームの最初の要素を記述するOptionalDouble
を返します。ストリームが空の場合は空のOptionalDouble
を返します。flatMap
(DoubleFunction<? extends DoubleStream> mapper) このストリームの各要素をマップされたストリーム(指定されたマッピング関数を各要素に適用することで得られる)の内容で置き換えた結果から成るストリームを返します。void
forEach
(DoubleConsumer action) このストリームの各要素に対してアクションを実行します。void
forEachOrdered
(DoubleConsumer action) このストリームの各要素に対してアクションを実行します。検出順が定義されたストリームでは、各要素が検出順に処理されることが保証されます。static DoubleStream
指定されたDoubleSupplier
によって生成される要素を含む、順序付けされていない無限順次ストリームを返します。static DoubleStream
iterate
(double seed, DoublePredicate hasNext, DoubleUnaryOperator next) 指定されたnext
ファンクションの反復適用によって生成された順次順序付けされたDoubleStream
を、指定されたhasNext
述語を満たす条件付き初期要素に戻します。static DoubleStream
iterate
(double seed, DoubleUnaryOperator f) 初期要素seed
に関数f
を繰り返し適用することで生成される、順序付けされた無限順次DoubleStream
を返します(seed
、f(seed)
、f(f(seed))
、といった要素から成るStream
が生成される)。limit
(long maxSize) このストリームの要素をmaxSize
以内の長さに切り詰めた結果から成るストリームを返します。map
(DoubleUnaryOperator mapper) このストリームの要素に指定された関数を適用した結果から構成されるストリームを返します。default DoubleStream
このストリームの各要素を複数の要素(特にゼロ個以上の要素)で置き換えた結果で構成されるストリームを返します。mapToInt
(DoubleToIntFunction mapper) このストリームの要素に指定された関数を適用した結果から構成されるIntStream
を返します。mapToLong
(DoubleToLongFunction mapper) このストリームの要素に指定された関数を適用した結果から構成されるLongStream
を返します。<U> Stream
<U> mapToObj
(DoubleFunction<? extends U> mapper) 指定された関数をこのストリームの要素に適用した結果から構成される、オブジェクト値のStream
を返します。max()
このストリームの最大要素を記述するOptionalDouble
または空のOptionalDouble(このストリームが空の場合)を返します。min()
このストリームの最小要素を記述するOptionalDouble
または空のOptionalDouble(このストリームが空の場合)を返します。boolean
noneMatch
(DoublePredicate predicate) 指定された述語に一致する要素がこのストリーム内に存在しないかどうかを返します。static DoubleStream
of
(double t) 単一要素を含む順次DoubleStream
を返します。static DoubleStream
of
(double... values) 指定された値を要素に持つ、順序付けされた順次ストリームを返します。peek
(DoubleConsumer action) このストリームの要素から成るストリームを返すほか、その結果のストリームから消費される各要素に対し、指定されたアクションを実行します。double
reduce
(double identity, DoubleBinaryOperator op) skip
(long n) このストリームの最初のn
個の要素を破棄した残りの要素で構成されるストリームを返します。sorted()
このストリームの要素で構成されるストリームをソートされた順序で返します。double
sum()
このストリーム内の要素の合計を返します。このストリームの要素に関する各種のサマリー・データを記述するDoubleSummaryStatistics
を返します。default DoubleStream
takeWhile
(DoublePredicate predicate) このストリームが順序付けされている場合、指定された述語に一致する、このストリームから取得された要素の最長のプレフィクスで構成されるストリームを返します。double[]
toArray()
このストリームの要素を含む配列を返します。インタフェースjava.util.stream.BaseStreamで宣言されたメソッド
close, isParallel, iterator, onClose, parallel, sequential, spliterator, unordered
-
メソッドの詳細
-
filter
DoubleStream filter(DoublePredicate predicate) このストリームの要素のうち、指定された述語に一致するものから構成されるストリームを返します。これは中間操作です。
-
map
DoubleStream map(DoubleUnaryOperator mapper) このストリームの要素に指定された関数を適用した結果から構成されるストリームを返します。これは中間操作です。
-
mapToObj
<U> Stream<U> mapToObj(DoubleFunction<? extends U> mapper) 指定された関数をこのストリームの要素に適用した結果から構成される、オブジェクト値のStream
を返します。これは中間操作です。
-
mapToInt
IntStream mapToInt(DoubleToIntFunction mapper) このストリームの要素に指定された関数を適用した結果から構成されるIntStream
を返します。これは中間操作です。
-
mapToLong
LongStream mapToLong(DoubleToLongFunction mapper) このストリームの要素に指定された関数を適用した結果から構成されるLongStream
を返します。これは中間操作です。
-
flatMap
DoubleStream flatMap(DoubleFunction<? extends DoubleStream> mapper) -
mapMulti
default DoubleStream mapMulti(DoubleStream.DoubleMapMultiConsumer mapper) このストリームの各要素を複数の要素(特にゼロ個以上の要素)で置き換えた結果で構成されるストリームを返します。 置換を実行するには、置換要素を受け入れるconsumer引数とともに、指定されたマッピング関数を各要素に適用します。 マッピング関数は、コンシューマをゼロ回以上コールして置換要素を提供します。これは中間操作です。
consumer引数がマッピング関数に対するアプリケーションのスコープ外で使用されている場合、結果は未定義です。
- 実装要件:
- デフォルト実装は、このストリームで
flatMap
を呼び出し、次のように動作する関数を渡します。 最初に、新しく作成された内部バッファに置換要素を蓄積するDoubleConsumer
を使用してマッパー関数をコールします。 マッパー関数が戻ると、内部バッファからDoubleStream
が作成されます。 最後に、このストリームをflatMap
に返します。 - パラメータ:
mapper
- 置換要素を生成するnon-interfering、statelessファンクション- 戻り値:
- 新しいストリーム
- 導入されたバージョン:
- 16
- 関連項目:
-
distinct
DoubleStream distinct()このストリームの重複を除いた要素から構成されるストリームを返します。 要素が等しいかどうかの比較は、Double.compare(double, double)
に従って行われます。これはステートフルな中間操作です。
- 戻り値:
- 結果のストリーム
-
sorted
DoubleStream sorted()このストリームの要素で構成されるストリームをソートされた順序で返します。 要素が等しいかどうかの比較は、Double.compare(double, double)
に従って行われます。これはステートフルな中間操作です。
- 戻り値:
- 結果のストリーム
-
peek
DoubleStream peek(DoubleConsumer action) このストリームの要素から成るストリームを返すほか、その結果のストリームから消費される各要素に対し、指定されたアクションを実行します。これは中間操作です。
並列ストリーム・パイプラインの場合、上流の操作によって用意された各要素に対し、任意のタイミングで任意のスレッド内でアクションが呼び出される可能性があります。 アクションが共有状態を変更する場合、必要な同期を提供する責任はアクションにあります。
- APIのノート:
- このメソッドの主な存在理由は、要素がパイプライン内の特定のポイントを通過する際にその内容を確認するようなデバッグをサポートすることにあります。
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();
ストリーム実装で、一部またはすべての要素(
findFirst
のような短絡操作やcount()
に記載されている例)の生成を最適化できる場合、それらの要素に対してアクションは呼び出されません。 - パラメータ:
action
- ストリームから消費される要素に対して実行すべき非干渉アクション- 戻り値:
- 新しいストリーム
-
limit
DoubleStream limit(long maxSize) このストリームの要素をmaxSize
以内の長さに切り詰めた結果から成るストリームを返します。これは、ステートフルな短絡中間操作です。
- APIのノート:
limit()
は、順次ストリーム・パイプラインでは一般に低コストの操作ですが、順序付けされた並列パイプラインではコストが非常に高くなる可能性があります(特にmaxSize
の値が大きい場合)。任意のn個の要素を返すだけでなく、検出順での最初のn個の要素を返さなければいけない、という制約がlimit(n)
に課されるからです。 状況のセマンティックスが許せば、順序付けされていないストリーム・ソース(generate(DoubleSupplier)
など)を使用するか、BaseStream.unordered()
で順序付けの制約をなくせば、並列パイプラインのlimit()
が大幅に高速化される可能性があります。 検出順序との整合性が必要で、かつ並列パイプラインでのlimit()
のパフォーマンスやメモリー使用量に問題がある場合には、BaseStream.sequential()
で順次実行に切り替えるとパフォーマンスが改善される可能性があります。- パラメータ:
maxSize
- ストリームの要素数の上限- 戻り値:
- 新しいストリーム
- 例外:
IllegalArgumentException
-maxSize
が負の場合
-
skip
DoubleStream skip(long n) このストリームの最初のn
個の要素を破棄した残りの要素で構成されるストリームを返します。 このストリームに含まれる要素の数がn
個より少ない場合は、空のストリームが返されます。これはステートフルな中間操作です。
- APIのノート:
skip()
は、順次ストリーム・パイプラインでは一般に低コストの操作ですが、順序付けされた並列パイプラインではコストが非常に高くなる可能性があります(特にn
の値が大きい場合)。任意のn個の要素をスキップするだけでなく、検出順での最初のn個の要素をスキップしなければいけない、という制約がskip(n)
に課されるからです。 状況のセマンティックスが許せば、順序付けされていないストリーム・ソース(generate(DoubleSupplier)
など)を使用するか、BaseStream.unordered()
で順序付けの制約をなくせば、並列パイプラインのskip()
が大幅に高速化される可能性があります。 検出順序との整合性が必要で、かつ並列パイプラインでのskip()
のパフォーマンスやメモリー使用量に問題がある場合には、BaseStream.sequential()
で順次実行に切り替えるとパフォーマンスが改善される可能性があります。- パラメータ:
n
- スキップする先頭要素の数- 戻り値:
- 新しいストリーム
- 例外:
IllegalArgumentException
-n
が負の場合
-
takeWhile
default DoubleStream takeWhile(DoublePredicate predicate) このストリームが順序付けされている場合、指定された述語に一致する、このストリームから取得された要素の最長のプレフィクスで構成されるストリームを返します。 それ以外の場合は、このストリームが順序付けられていない場合、指定された述語に一致する、このストリームから取得された要素のサブセットで構成されるストリームが返されます。このストリームが順序付けされている場合、最長のプレフィクスは、指定された述語に一致するこのストリームの要素の連続したシーケンスです。 順序の最初の要素は、このストリームの最初の要素であり、順序の最後の要素の直後の要素は、指定された述語と一致しません。
このストリームが順序付けされておらず、このストリームの一部の(すべてではない)要素が指定された述語と一致する場合、この操作の動作は非決定的であり、一致する要素(空のセットを含む)のサブセットを自由に取得できます。
このストリームのすべての要素が指定された述語に一致する場合、このストリームが順序付けられているかどうかにかかわらず、この操作ではすべての要素(結果は入力と同じです)が使用され、ストリームの要素が指定された述語に一致しない場合は(結果は空のストリームです)は使用されません。
これは、ステートフルな短絡中間操作です。
- APIのノート:
takeWhile()
は、通常、順次ストリーム・パイプラインに対する安価な操作ですが、順序付けられたパラレル・パイプラインでは非常にコストがかかります。これは、操作が、有効なプレフィクスのみでなく、検出順序における要素の最長のプレフィクスを返すように制約されるためです。 状況のセマンティクスで許可されている場合、順序付けされていないストリーム・ソース(generate(DoubleSupplier)
など)を使用するか、BaseStream.unordered()
で順序付け制約を削除すると、パラレル・パイプラインでtakeWhile()
が大幅に高速化される可能性があります。 出現順序の一貫性が必要で、パラレル・パイプラインでtakeWhile()
を使用したパフォーマンスまたはメモリー使用率が低下している場合、BaseStream.sequential()
を使用して順次実行に切り替えると、パフォーマンスが向上する可能性があります。- 実装要件:
- デフォルトの実装では、このストリームの
spliterator
を取得し、そのスプリッタをラップしてトラバーサルに対するこの操作のセマンティクスをサポートし、ラップされたスプリッタに関連付けられた新しいストリームを返します。 戻されたストリームは、このストリーム(BaseStream.isParallel()
による並列実行または順次実行)の実行特性を保持しますが、ラップされたスプリッタは分割をサポートしないことを選択できます。 返されたストリームが閉じられると、返されたストリームとこのストリームの両方のクローズ・ハンドラが起動されます。 - パラメータ:
predicate
- 要素の最長のプレフィクスを決定するために要素に適用するnon-interfering、stateless述語。- 戻り値:
- 新しいストリーム
- 導入されたバージョン:
- 9
-
dropWhile
default DoubleStream dropWhile(DoublePredicate predicate) このストリームが順序付けされている場合、指定された述語に一致する要素の最長のプレフィクスを削除した後、このストリームの残りの要素で構成されるストリームを返します。 それ以外の場合は、このストリームが順序付けられていない場合、指定された述語に一致する要素のサブセットを削除した後に、このストリームの残りの要素で構成されるストリームが返されます。このストリームが順序付けされている場合、最長のプレフィクスは、指定された述語に一致するこのストリームの要素の連続したシーケンスです。 順序の最初の要素は、このストリームの最初の要素であり、順序の最後の要素の直後の要素は、指定された述語と一致しません。
このストリームが順序付けされておらず、このストリームの一部の(すべてではない)要素が指定された述語と一致する場合、この操作の動作は非決定的であり、一致する要素(空のセットを含む)のサブセットを自由に削除できます。
このストリームのすべての要素が指定された述語と一致する場合、このストリームが順序付けされているかどうかに関係なく、この操作ではすべての要素(結果は空のストリームです)が削除されるか、またはストリームの要素が指定された述語に一致しない場合、要素は削除されません(結果は入力と同じです)。
これはステートフルな中間操作です。
- APIのノート:
dropWhile()
は、通常、順次ストリーム・パイプラインに対する安価な操作ですが、順序付けられたパラレル・パイプラインでは非常にコストがかかります。これは、操作が、有効なプレフィクスのみでなく、検出順序における要素の最長のプレフィクスを返すように制約されるためです。 状況のセマンティクスで許可されている場合、順序付けされていないストリーム・ソース(generate(DoubleSupplier)
など)を使用するか、BaseStream.unordered()
で順序付け制約を削除すると、パラレル・パイプラインでdropWhile()
が大幅に高速化される可能性があります。 出現順序の一貫性が必要で、パラレル・パイプラインでdropWhile()
を使用したパフォーマンスまたはメモリー使用率が低下している場合、BaseStream.sequential()
を使用して順次実行に切り替えると、パフォーマンスが向上する可能性があります。- 実装要件:
- デフォルトの実装では、このストリームの
spliterator
を取得し、そのスプリッタをラップしてトラバーサルに対するこの操作のセマンティクスをサポートし、ラップされたスプリッタに関連付けられた新しいストリームを返します。 戻されたストリームは、このストリーム(BaseStream.isParallel()
による並列実行または順次実行)の実行特性を保持しますが、ラップされたスプリッタは分割をサポートしないことを選択できます。 返されたストリームが閉じられると、返されたストリームとこのストリームの両方のクローズ・ハンドラが起動されます。 - パラメータ:
predicate
- 要素の最長のプレフィクスを決定するために要素に適用するnon-interfering、stateless述語。- 戻り値:
- 新しいストリーム
- 導入されたバージョン:
- 9
-
forEach
void forEach(DoubleConsumer action) このストリームの各要素に対してアクションを実行します。これは終端操作です。
並列ストリーム・パイプラインの場合、この操作は、ストリームの検出順序を考慮することを保証しません。保証すると並列性のメリットが犠牲になるからです。 与えられた任意の要素に対し、ライブラリが選択した任意のタイミングで任意のスレッド内でアクションが実行される可能性があります。 アクションが共有状態にアクセスする場合、必要な同期を提供する責任はアクションにあります。
- パラメータ:
action
- 要素に対して実行する非干渉アクション
-
forEachOrdered
void forEachOrdered(DoubleConsumer action) このストリームの各要素に対してアクションを実行します。検出順が定義されたストリームでは、各要素が検出順に処理されることが保証されます。これは終端操作です。
- パラメータ:
action
- 要素に対して実行する非干渉アクション- 関連項目:
-
toArray
double[] toArray()このストリームの要素を含む配列を返します。これは終端操作です。
- 戻り値:
- このストリームの要素を含む配列
-
reduce
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
に等しくなります。アキュムレータ
関数は結合的な関数でなければいけません。これは終端操作です。
- APIのノート:
- 合計、最小、最大、平均はすべて、リダクションの特殊な場合です。 数値ストリームの合計は次のように表現できます。
あるいは、次のようによりコンパクトにします。double sum = numbers.reduce(0, (a, b) -> a+b);
double sum = numbers.reduce(0, Double::sum);
これは、単純にループで中間合計を更新していく方法に比べて遠回りな集計方法に見えるかもしれませんが、リダクション操作の並列化が容易に行え、並列化の際に同期を追加する必要がなく、データ競合のリスクも大幅に減少します。
- パラメータ:
identity
- 蓄積関数に対する単位元の値op
- 2つの値を結合するための結合的、非干渉およびステートレスな関数- 戻り値:
- リダクションの結果
- 関連項目:
-
reduce
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();
アキュムレータ
関数は結合的な関数でなければいけません。これは終端操作です。
-
collect
<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;
collect
操作はreduce(double, DoubleBinaryOperator)
と同様、同期を追加しなくても並列化できます。これは終端操作です。
- 型パラメータ:
R
- 可変結果コンテナの型- パラメータ:
supplier
- 新しい可変結果コンテナを作成する関数。 並列実行の場合、この関数は複数回呼び出される可能性がありますが、そのたびに新しい値を返す必要があります。accumulator
- 結果コンテナに要素を折りたたむ必要があるassociative、non-interfering、statelessファンクション。combiner
- 2つの部分的な結果コンテナを受け入れ、それらをマージするassociative、non-interfering、stateless関数。これは、累計関数と互換性がある必要があります。 コンバイナ関数は、2番目の結果コンテナから1番目の結果コンテナに要素を折りたたむ必要があります。- 戻り値:
- リダクションの結果
- 関連項目:
-
sum
double sum()このストリーム内の要素の合計を返します。 合計は、リダクションの特殊な場合です。 浮動小数点合計が正確であれば、このメソッドは次と同等になります。
しかし、浮動小数点合計は正確ではないため、上記コードは、このメソッドが行う合計計算と必ずしも同等になりません。return reduce(0, Double::sum);
浮動小数点合計の値は、入力値と加算操作順序の両方の関数になります。 このメソッドの加算操作の順序は意図的に未定義になっていますが、それは、実装が計算結果の速度や精度を柔軟に改善できるようにするためです。 特に、このメソッドを補正加算などのテクニックを使って実装すれば、
double
値の単純な合計に比べ、数値合計の誤り限界を減らせます。 演算の順序と、異なる合計スキームを使用する可能性があるため、このメソッドの出力は同じ入力要素によって異なる場合があります。様々な条件によって、無限の合計が計算される場合があります。 これは、合計されるすべての要素が有限であっても発生する可能性があります。 いずれかの要素が無限の場合、合計は無限になります:
- いずれかの要素がNaNの場合、最後の合計はNaNになります。
- 要素に1つ以上の無限大が含まれている場合、合計は無限またはNaNになります。
- 要素に逆符号の無限大が含まれている場合、合計はNaNになります。
- 要素に1つの符号の無限大が含まれ、中間合計が反対符号の無限大にオーバーフローする場合、合計はNaNになります。
これは終端操作です。
- APIのノート:
- 要素が絶対値の昇順にソートされていると、生成される結果の精度が高まる傾向があります。
- 戻り値:
- このストリームの要素の合計
-
min
OptionalDouble min()このストリームの最小要素を記述するOptionalDouble
または空のOptionalDouble(このストリームが空の場合)を返します。 いずれかのストリーム要素がNaNの場合、最小要素はDouble.NaN
になります。 数値比較演算子とは異なり、このメソッドは負のゼロが厳密には正のゼロよりも小さいと見なします。 これはリダクションの特殊な場合であり、次と同等になります。return reduce(Double::min);
これは終端操作です。
- 戻り値:
- このストリームの最小要素を含む
OptionalDouble
または空のOptional (ストリームが空の場合)
-
max
OptionalDouble max()このストリームの最大要素を記述するOptionalDouble
または空のOptionalDouble(このストリームが空の場合)を返します。 いずれかのストリーム要素がNaNの場合、最大要素はDouble.NaN
になります。 数値比較演算子とは異なり、このメソッドは負のゼロが厳密には正のゼロよりも小さいと見なします。 これはリダクションの特殊な場合であり、次と同等になります。return reduce(Double::max);
これは終端操作です。
- 戻り値:
- このストリームの最大要素を含む
OptionalDouble
または空のOptional (ストリームが空の場合)
-
count
long count()- APIのノート:
- 実装では、ストリーム・ソースから直接カウントを計算できる場合、ストリーム・パイプライン(連続的または並列的に)を実行しないことを選択できます。 そのような場合、ソース要素はトラバースされず、中間操作は評価されません。 デバッグなどの無害なケースを除き、副作用のある行動パラメータが強く推奨されない場合があります。 たとえば、次のストリームについて考えてみます:
ストリーム・ソースでカバーされる要素の数がわかっており、中間操作であるDoubleStream s = DoubleStream.of(1, 2, 3, 4); long count = s.peek(System.out::println).count();
peek
は、ストリーム(flatMap
またはfilter
操作の場合のように)に要素を注入または削除しません。 したがって、カウントは4で、パイプラインを実行する必要はなく、副作用として要素を出力します。 - 戻り値:
- このストリームの要素の個数
-
average
OptionalDouble average()このストリームの要素の算術平均を記述するOptionalDouble
を返します。このストリームが空の場合は空のOptionalを返します。計算された平均は数値的に変化し、合計の計算として特殊なケース動作を持つ場合があります。詳細は、
sum()
を参照してください。平均は、リダクションの特殊な場合です。
これは終端操作です。
- APIのノート:
- 要素が絶対値の昇順にソートされていると、生成される結果の精度が高まる傾向があります。
- 戻り値:
- このストリームの平均要素を含む
OptionalDouble
または空のオプション(ストリームが空の場合)
-
summaryStatistics
DoubleSummaryStatistics summaryStatistics()- 戻り値:
- このストリームの要素に関する各種のサマリー・データを記述する
DoubleSummaryStatistics
-
anyMatch
boolean anyMatch(DoublePredicate predicate) このストリームのいずれかの要素が指定された述語に一致するかどうかを返します。 すべての要素で述語を評価するとは限りません(結果を決定するのに必要でない場合)。 ストリームが空の場合、false
が返され、述語は評価されません。これは短絡終端操作です。
-
allMatch
boolean allMatch(DoublePredicate predicate) このストリームのすべての要素が指定された述語に一致するかどうかを返します。 すべての要素で述語を評価するとは限りません(結果を決定するのに必要でない場合)。 ストリームが空の場合、true
が返され、述語は評価されません。これは短絡終端操作です。
-
noneMatch
boolean noneMatch(DoublePredicate predicate) 指定された述語に一致する要素がこのストリーム内に存在しないかどうかを返します。 すべての要素で述語を評価するとは限りません(結果を決定するのに必要でない場合)。 ストリームが空の場合、true
が返され、述語は評価されません。これは短絡終端操作です。
-
findFirst
OptionalDouble findFirst()このストリームの最初の要素を記述するOptionalDouble
を返します。ストリームが空の場合は空のOptionalDouble
を返します。 ストリームが検出順序を持たない場合は、任意の要素が返されます。これは短絡終端操作です。
- 戻り値:
- このストリームの最初の要素を記述する
OptionalDouble
または空のOptionalDouble
(ストリームが空の場合)
-
findAny
OptionalDouble findAny()ストリームの一部の要素を記述するOptionalDouble
を返します。ストリームが空の場合は空のOptionalDouble
を返します。これは短絡終端操作です。
この操作の動作は明らかに非決定論的です。ストリームの任意の要素を自由に選択できます。 これは、並列処理でのパフォーマンスを最大化できるようにするためです。デメリットは、同じソースに対して呼び出すたびに、違う結果が返される可能性がある点です。 (安定した結果が必要な場合は、かわりに
findFirst()
を使用してください。)- 戻り値:
- このストリームのある要素を記述する
OptionalDouble
または空のOptionalDouble
(ストリームが空の場合) - 関連項目:
-
boxed
このストリームの各要素をDouble
にボクシングした結果から構成されるStream
を返します。これは中間操作です。
- 戻り値:
- ストリームの各要素を
Double
にボクシングした結果から構成されるStream
-
builder
static DoubleStream.Builder builder()DoubleStream
のビルダーを返します。- 戻り値:
- ストリーム・ビルダー
-
empty
static DoubleStream empty()空の順次DoubleStream
を返します。- 戻り値:
- 空の順次ストリーム
-
of
static DoubleStream of(double t) 単一要素を含む順次DoubleStream
を返します。- パラメータ:
t
- 単一要素- 戻り値:
- 単一要素の順次ストリーム
-
of
static DoubleStream of(double... values) 指定された値を要素に持つ、順序付けされた順次ストリームを返します。- パラメータ:
values
- 新しいストリームの要素- 戻り値:
- 新しいストリーム
-
iterate
static DoubleStream iterate(double seed, DoubleUnaryOperator f) 初期要素seed
に関数f
を繰り返し適用することで生成される、順序付けされた無限順次DoubleStream
を返します(seed
、f(seed)
、f(f(seed))
、といった要素から成るStream
が生成される)。DoubleStream
の最初の要素(位置0
)は、指定されたseed
になります。n > 0
の場合、位置n
の要素は、位置n - 1
の要素に関数f
を適用した結果になります。1つの要素happens-beforeに
f
を適用するアクション(後続の要素にf
を適用するアクション)。 どの要素に対しても、ライブラリが選択するどのスレッドでもアクションを実行できます。- パラメータ:
seed
- 初期要素f
- 新しい要素を生成するために前の要素に適用される関数- 戻り値:
- 新しい順次
DoubleStream
-
iterate
static DoubleStream iterate(double seed, DoublePredicate hasNext, DoubleUnaryOperator next) 指定されたnext
ファンクションの反復適用によって生成された順次順序付けされたDoubleStream
を、指定されたhasNext
述語を満たす条件付き初期要素に戻します。 ストリームは、hasNext
述語がfalseを返すとすぐに終了します。DoubleStream.iterate
は、対応するforループによって生成されるものと同じシーケンスを生成する必要があります:for (double index=seed; hasNext.test(index); index = next.applyAsDouble(index)) { ... }
hasNext
述語がシード値を保持しない場合、結果のシーケンスは空になることがあります。 それ以外の場合、最初の要素が指定のseed
値になり、次の要素(存在する場合)は、next
関数をseed
値に適用した結果になります。また、hasNext
述語がストリームを終了する必要があることを示すまで反復的に行われます。hasNext
述語を要素happens-beforeに適用するアクション(その要素にnext
関数を適用するアクション)。 1つの要素happens-beforeにnext
関数を適用するアクション(後続の要素にhasNext
述語を適用するアクション)。 どの要素に対しても、ライブラリが選択するどのスレッドでもアクションを実行できます。- パラメータ:
seed
- 初期要素hasNext
- ストリームを終了する必要があるタイミングを決定するために要素に適用する述語。next
- 新しい要素を生成するために前の要素に適用される関数- 戻り値:
- 新しい順次
DoubleStream
- 導入されたバージョン:
- 9
-
generate
static DoubleStream generate(DoubleSupplier s) 指定されたDoubleSupplier
によって生成される要素を含む、順序付けされていない無限順次ストリームを返します。 これは、定数ストリームやランダムな要素から成るストリームなどを生成するのに適しています。- パラメータ:
s
- 要素を生成するためのDoubleSupplier
- 戻り値:
- 順序付けされていない新しい無限順次
DoubleStream
-
concat
static DoubleStream concat(DoubleStream a, DoubleStream b) 最初のストリームの全要素と2番目のストリームの全要素を連結したものを要素に持つ、遅延連結ストリームを作成します。 結果のストリームが順序付けされるのは、入力ストリームがどちらも順序付けされている場合であり、並列的になるのは、入力ストリームのどちらかが並列的な場合です。 結果のストリームのクローズ時には、両方の入力ストリームのクローズ・ハンドラが呼び出されます。このメソッドは2つの入力ストリームで動作し、各ストリームをそのソースにバインドします。 その結果、入力ストリーム・ソースへのその後の変更は、連結ストリーム結果に反映されないことがあります。
- APIのノート:
- 最適化の機会を保持するために、このメソッドは各ストリームをそのソースにバインドし、パラメータとして2つのストリームのみを受け入れます。 例えば、各入力ストリーム・ソースの正確なサイズが分かっている場合、連結ストリーム・ソースの正確なサイズを計算することができます。 バインディングなしでストリームを連結する場合、またはこのメソッドへのネストされた呼び出しを行わない場合は、ストリームのストリームを作成し、アイデンティティ関数を使用してフラット・マッピングしてみてください:
DoubleStream concat = Stream.of(s1, s2, s3, s4).flatMapToDouble(s -> s);
- 実装上のノート:
- 連結を繰り返すことでストリームを構築する際には注意が必要です。 深く連結されたストリームの要素にアクセスすると、ディープ・コール・チェーンまたは
StackOverflowError
が発生する可能性があります。 - パラメータ:
a
- 最初のストリームb
- 2番目のストリーム- 戻り値:
- 2つの入力ストリームを連結したもの
-