- すべてのスーパー・インタフェース:
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 interfaceDoubleStreamの可変ビルダーです。static interfacedouble値の引数およびDoubleConsumerを受け入れ、結果を返さない演算を表します。 -
メソッドのサマリー
修飾子と型メソッド説明booleanallMatch(DoublePredicate predicate) このストリームのすべての要素が指定された述語に一致するかどうかを返します。booleananyMatch(DoublePredicate predicate) このストリームのいずれかの要素が指定された述語に一致するかどうかを返します。average()このストリームの要素の算術平均を記述するOptionalDoubleを返します。このストリームが空の場合は空のOptionalを返します。boxed()このストリームの各要素をDoubleにボクシングした結果から構成されるStreamを返します。static DoubleStream.Builderbuilder()DoubleStreamのビルダーを返します。<R> Rcollect(Supplier<R> supplier, ObjDoubleConsumer<R> accumulator, BiConsumer<R, R> combiner) このストリームの要素に対して可変リダクション操作を実行します。static DoubleStreamconcat(DoubleStream a, DoubleStream b) 最初のストリームの全要素と2番目のストリームの全要素を連結したものを要素に持つ、遅延連結ストリームを作成します。longcount()このストリームの要素の個数を返します。distinct()このストリームの重複を除いた要素から構成されるストリームを返します。default DoubleStreamdropWhile(DoublePredicate predicate) このストリームが順序付けされている場合は、指定された述語に一致する要素の最長プレフィクスを削除した後に、このストリームの残りの要素で構成されるストリームを返します。static DoubleStreamempty()空の順次DoubleStreamを返します。filter(DoublePredicate predicate) このストリームの要素のうち、指定された述語に一致するものから構成されるストリームを返します。findAny()ストリームの一部の要素を記述するOptionalDoubleを返します。ストリームが空の場合は空のOptionalDoubleを返します。このストリームの最初の要素を記述するOptionalDoubleを返します。ストリームが空の場合は空のOptionalDoubleを返します。flatMap(DoubleFunction<? extends DoubleStream> mapper) このストリームの各要素をマップされたストリーム(指定されたマッピング関数を各要素に適用することで得られる)の内容で置き換えた結果から成るストリームを返します。voidforEach(DoubleConsumer action) このストリームの各要素に対してアクションを実行します。voidforEachOrdered(DoubleConsumer action) このストリームの各要素に対してアクションを実行します。検出順が定義されたストリームでは、各要素が検出順に処理されることが保証されます。static DoubleStream指定されたDoubleSupplierによって生成される要素を含む、順序付けされていない無限順次ストリームを返します。static DoubleStreamiterate(double seed, DoublePredicate hasNext, DoubleUnaryOperator next) 指定されたnext関数を初期要素に反復適用することによって生成され、与えられたhasNext述語を満たすことを条件とする、順次順序付けされたDoubleStreamを返します。static DoubleStreamiterate(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(このストリームが空の場合)を返します。booleannoneMatch(DoublePredicate predicate) 指定された述語に一致する要素がこのストリーム内に存在しないかどうかを返します。static DoubleStreamof(double t) 単一要素を含む順次DoubleStreamを返します。static DoubleStreamof(double... values) 指定された値を要素に持つ、順序付けされた順次ストリームを返します。peek(DoubleConsumer action) このストリームの要素から成るストリームを返すほか、その結果のストリームから消費される各要素に対し、指定されたアクションを実行します。doublereduce(double identity, DoubleBinaryOperator op) skip(long n) このストリームの最初のn個の要素を破棄した残りの要素で構成されるストリームを返します。sorted()このストリームの要素で構成されるストリームをソートされた順序で返します。doublesum()このストリーム内の要素の合計を返します。このストリームの要素に関する各種のサマリー・データを記述するDoubleSummaryStatisticsを返します。default DoubleStreamtakeWhile(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) このストリームの各要素をマップされたストリーム(指定されたマッピング関数を各要素に適用することで得られる)の内容で置き換えた結果から成るストリームを返します。 各マップ先ストリームは、その内容がこのストリーム内に配置されるとクローズされます。 (マップ先ストリームがnullの場合はかわりに空のストリームが使用されます。)これは中間操作です。
-
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- associative、non-interfering、stateless関数は、2つの部分結果コンテナを受け入れ、それらをマージします。これらのコンテナは、アキュムレータ関数と互換性がなければなりません。 コンバイナ関数は、第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を適用した結果になります。fを1つの要素に適用するアクションhappens-beforeは、後続の要素にfを適用するアクションです。 どのような要素に対しても、ライブラリが選択するどのスレッドでもアクションを実行できます。- パラメータ:
seed- 初期要素f- 新しい要素を生成するために前の要素に適用される関数- 戻り値:
- 新しい順次
DoubleStream
-
iterate
static DoubleStream iterate(double seed, DoublePredicate hasNext, DoubleUnaryOperator next) 指定されたnext関数を初期要素に反復適用することによって生成され、与えられたhasNext述語を満たすことを条件とする、順次順序付けされたDoubleStreamを返します。 ストリームは、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つの入力ストリームを連結したもの
-