モジュール java.base
パッケージ java.util.stream

インタフェースLongStream

すべてのスーパー・インタフェース:
AutoCloseable, BaseStream<Long,LongStream>

public interface LongStream extends BaseStream<Long,LongStream>
順次および並列の集約操作をサポートするプリミティブlong値要素のシーケンスです。 これは、Streamに対してlongプリミティブ特殊化を行ったものです。

次の例は、StreamLongStreamを使って赤色のウィジェットの重さの合計を計算する集計操作を示したものです。


     long sum = widgets.stream()
                       .filter(w -> w.getColor() == RED)
                       .mapToLong(w -> w.getWeight())
                       .sum();
 
ストリーム、ストリーム操作、ストリーム・パイプライン、および並列性の詳しい仕様については、Streamのクラス・ドキュメントやjava.util.streamのパッケージ・ドキュメントを参照してください。

導入されたバージョン:
1.8
関連項目:
  • ネストされたクラスのサマリー

    ネストされたクラス
    修飾子と型
    インタフェース
    説明
    static interface 
    LongStreamの可変ビルダーです。
    static interface 
    long値の引数およびLongConsumerを受け入れ、結果を返さない演算を表します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    boolean
    このストリームのすべての要素が指定された述語に一致するかどうかを返します。
    boolean
    このストリームのいずれかの要素が指定された述語に一致するかどうかを返します。
    このストリームの要素をdoubleに変換した結果から構成されるDoubleStreamを返します。
    このストリームの要素の算術平均を記述するOptionalDoubleを返します。このストリームが空の場合は空のOptionalを返します。
    ストリームの各要素をLongにボクシングした結果から構成されるStreamを返します。
    LongStreamのビルダーを返します。
    <R> R
    collect(Supplier<R> supplier, ObjLongConsumer<R> accumulator, BiConsumer<R,R> combiner)
    このストリームの要素に対して可変リダクション操作を実行します。
    static LongStream
    最初のストリームの全要素と2番目のストリームの全要素を連結したものを要素に持つ、遅延連結ストリームを作成します。
    long
    このストリームの要素の個数を返します。
    このストリームの重複を除いた要素から構成されるストリームを返します。
    default LongStream
    このストリームが順序付けされている場合は、指定された述語に一致する要素の最長プレフィクスを削除した後に、このストリームの残りの要素で構成されるストリームを返します。
    static LongStream
    空の順次LongStreamを返します。
    filter(LongPredicate predicate)
    このストリームの要素のうち、指定された述語に一致するものから構成されるストリームを返します。
    ストリームの一部の要素を記述するOptionalLongを返します。ストリームが空の場合は空のOptionalLongを返します。
    このストリームの最初の要素を記述するOptionalLongを返します。ストリームが空の場合は空のOptionalLongを返します。
    flatMap(LongFunction<? extends LongStream> mapper)
    このストリームの各要素をマップされたストリーム(指定されたマッピング関数を各要素に適用することで得られる)の内容で置き換えた結果から成るストリームを返します。
    void
    このストリームの各要素に対してアクションを実行します。
    void
    このストリームの各要素に対してアクションを実行します。検出順が定義されたストリームでは、各要素が検出順に処理されることが保証されます。
    static LongStream
    指定されたLongSupplierによって生成される要素を含む、順序付けされていない無限順次ストリームを返します。
    static LongStream
    iterate(long seed, LongPredicate hasNext, LongUnaryOperator next)
    指定されたnext関数を初期要素に反復適用することによって生成され、与えられたhasNext述語を満たすことを条件とする、順次順序付けされたLongStreamを返します。
    static LongStream
    iterate(long seed, LongUnaryOperator f)
    初期要素seedに関数fを繰り返し適用することで生成される、順序付けされた無限順次LongStreamを返します(seedf(seed)f(f(seed))、といった要素から成るStreamが生成される)。
    limit(long maxSize)
    このストリームの要素をmaxSize以内の長さに切り詰めた結果から成るストリームを返します。
    このストリームの要素に指定された関数を適用した結果から構成されるストリームを返します。
    default LongStream
    このストリームの各要素を複数の要素(特にゼロ個以上の要素)で置き換えた結果で構成されるストリームを返します。
    このストリームの要素に指定された関数を適用した結果から構成されるDoubleStreamを返します。
    このストリームの要素に指定された関数を適用した結果から構成されるIntStreamを返します。
    <U> Stream<U>
    mapToObj(LongFunction<? extends U> mapper)
    指定された関数をこのストリームの要素に適用した結果から構成される、オブジェクト値のStreamを返します。
    max()
    このストリームの最大要素を記述するOptionalLong、またはこのストリームが空の場合は空のOptionalを返します。
    min()
    このストリームの最小要素を記述するOptionalLong、またはこのストリームが空の場合は空のOptionalを返します。
    boolean
    指定された述語に一致する要素がこのストリーム内に存在しないかどうかを返します。
    static LongStream
    of(long t)
    単一要素を含む順次LongStreamを返します。
    static LongStream
    of(long... values)
    指定された値を要素に持つ、順序付けされた順次ストリームを返します。
    このストリームの要素から成るストリームを返すほか、その結果のストリームから消費される各要素に対し、指定されたアクションを実行します。
    static LongStream
    range(long startInclusive, long endExclusive)
    startInclusive(含む)からendExclusive(含まない)の範囲でステップ1でインクリメントした値を含む、順序付けされた順次LongStreamを返します。
    static LongStream
    rangeClosed(long startInclusive, long endInclusive)
    startInclusive(含む)からendInclusive(含む)の範囲でステップ1でインクリメントした値を含む、順序付けされた順次LongStreamを返します。
    long
    reduce(long identity, LongBinaryOperator op)
    指定された単位元の値と結合的な累積関数を使ってこのストリームの要素に対してリダクションを実行し、リデュースされた値を返します。
    結合的累積関数を使用して、このストリームの要素に対してリダクションを実行し、リダクションされた値を記述するOptionalLongを返します(ある場合)。
    skip(long n)
    このストリームの最初のn個の要素を破棄した残りの要素で構成されるストリームを返します。
    このストリームの要素で構成されるストリームをソートされた順序で返します。
    long
    sum()
    このストリーム内の要素の合計を返します。
    このストリームの要素に関する各種のサマリー・データを記述するLongSummaryStatisticsを返します。
    default LongStream
    このストリームが順序付けされている場合、指定された述語に一致するこのストリームから取得された要素の最長プレフィクスからなるストリームを返します。
    long[]
    このストリームの要素を含む配列を返します。

    インタフェース java.util.stream.BaseStreamで宣言されたメソッド

    close, isParallel, iterator, onClose, parallel, sequential, spliterator, unordered
  • メソッドの詳細

    • filter

      LongStream filter(LongPredicate predicate)
      このストリームの要素のうち、指定された述語に一致するものから構成されるストリームを返します。

      これは中間操作です。

      パラメータ:
      predicate - 各要素を含めるべきか判定する目的で各要素に適用する、非干渉ステートレスな述語
      戻り値:
      新しいストリーム
    • map

      このストリームの要素に指定された関数を適用した結果から構成されるストリームを返します。

      これは中間操作です。

      パラメータ:
      mapper - 各要素に適用する非干渉ステートレスな関数
      戻り値:
      新しいストリーム
    • mapToObj

      <U> Stream<U> mapToObj(LongFunction<? extends U> mapper)
      指定された関数をこのストリームの要素に適用した結果から構成される、オブジェクト値のStreamを返します。

      これは中間操作です。

      型パラメータ:
      U - 新しいストリームの要素の型
      パラメータ:
      mapper - 各要素に適用する非干渉ステートレスな関数
      戻り値:
      新しいストリーム
    • mapToInt

      IntStream mapToInt(LongToIntFunction mapper)
      このストリームの要素に指定された関数を適用した結果から構成されるIntStreamを返します。

      これは中間操作です。

      パラメータ:
      mapper - 各要素に適用する非干渉ステートレスな関数
      戻り値:
      新しいストリーム
    • mapToDouble

      DoubleStream mapToDouble(LongToDoubleFunction mapper)
      このストリームの要素に指定された関数を適用した結果から構成されるDoubleStreamを返します。

      これは中間操作です。

      パラメータ:
      mapper - 各要素に適用する非干渉ステートレスな関数
      戻り値:
      新しいストリーム
    • flatMap

      LongStream flatMap(LongFunction<? extends LongStream> mapper)
      このストリームの各要素をマップされたストリーム(指定されたマッピング関数を各要素に適用することで得られる)の内容で置き換えた結果から成るストリームを返します。 各マップ先ストリームは、その内容がこのストリーム内に配置されるとクローズされます。 (マップ先ストリームがnullの場合はかわりに空のストリームが使用されます。)

      これは中間操作です。

      パラメータ:
      mapper - 新しい値のLongStreamを生成するために各要素に適用する、非干渉ステートレスな関数
      戻り値:
      新しいストリーム
      関連項目:
    • mapMulti

      default LongStream mapMulti(LongStream.LongMapMultiConsumer mapper)
      このストリームの各要素を複数の要素(特にゼロ個以上の要素)で置き換えた結果で構成されるストリームを返します。 置換を実行するには、置換要素を受け入れるconsumer引数とともに、指定されたマッピング関数を各要素に適用します。 マッピング関数は、コンシューマをゼロ回以上コールして置換要素を提供します。

      これは中間操作です。

      consumer引数がマッピング関数に対するアプリケーションのスコープ外で使用されている場合、結果は未定義です。

      実装要件:
      デフォルト実装は、このストリームでflatMapを呼び出し、次のように動作する関数を渡します。 最初に、新しく作成された内部バッファに置換要素を蓄積するLongConsumerを使用してマッパー関数をコールします。 マッパー関数が戻ると、内部バッファからLongStreamが作成されます。 最後に、このストリームをflatMapに返します。
      パラメータ:
      mapper - 置換要素を生成するnon-interferingstatelessファンクション
      戻り値:
      新しいストリーム
      導入されたバージョン:
      16
      関連項目:
    • distinct

      LongStream distinct()
      このストリームの重複を除いた要素から構成されるストリームを返します。

      これはステートフルな中間操作です。

      戻り値:
      新しいストリーム
    • sorted

      LongStream sorted()
      このストリームの要素で構成されるストリームをソートされた順序で返します。

      これはステートフルな中間操作です。

      戻り値:
      新しいストリーム
    • peek

      LongStream peek(LongConsumer action)
      このストリームの要素から成るストリームを返すほか、その結果のストリームから消費される各要素に対し、指定されたアクションを実行します。

      これは中間操作です。

      並列ストリーム・パイプラインの場合、上流の操作によって用意された各要素に対し、任意のタイミングで任意のスレッド内でアクションが呼び出される可能性があります。 アクションが共有状態を変更する場合、必要な同期を提供する責任はアクションにあります。

      APIのノート:
      このメソッドの主な存在理由は、要素がパイプライン内の特定のポイントを通過する際にその内容を確認するようなデバッグをサポートすることにあります。
      
           LongStream.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

      LongStream limit(long maxSize)
      このストリームの要素をmaxSize以内の長さに切り詰めた結果から成るストリームを返します。

      これは、ステートフルな短絡中間操作です。

      APIのノート:
      limit()は、順次ストリーム・パイプラインでは一般に低コストの操作ですが、順序付けされた並列パイプラインではコストが非常に高くなる可能性があります(特にmaxSizeの値が大きい場合)。任意のn個の要素を返すだけでなく、検出順での最初のn個の要素を返さなければいけない、という制約がlimit(n)に課されるからです。 状況のセマンティックスが許せば、順序付けされていないストリーム・ソース(generate(LongSupplier)など)を使用するか、BaseStream.unordered()で順序付けの制約をなくせば、並列パイプラインのlimit()が大幅に高速化される可能性があります。 検出順序との整合性が必要で、かつ並列パイプラインでのlimit()のパフォーマンスやメモリー使用量に問題がある場合には、BaseStream.sequential()で順次実行に切り替えるとパフォーマンスが改善される可能性があります。
      パラメータ:
      maxSize - ストリームの要素数の上限
      戻り値:
      新しいストリーム
      例外:
      IllegalArgumentException - maxSizeが負の場合
    • skip

      LongStream skip(long n)
      このストリームの最初のn個の要素を破棄した残りの要素で構成されるストリームを返します。 このストリームに含まれる要素の数がn個より少ない場合は、空のストリームが返されます。

      これはステートフルな中間操作です。

      APIのノート:
      skip()は、順次ストリーム・パイプラインでは一般に低コストの操作ですが、順序付けされた並列パイプラインではコストが非常に高くなる可能性があります(特にnの値が大きい場合)。任意のn個の要素をスキップするだけでなく、検出順での最初のn個の要素をスキップしなければいけない、という制約がskip(n)に課されるからです。 状況のセマンティックスが許せば、順序付けされていないストリーム・ソース(generate(LongSupplier)など)を使用するか、BaseStream.unordered()で順序付けの制約をなくせば、並列パイプラインのskip()が大幅に高速化される可能性があります。 検出順序との整合性が必要で、かつ並列パイプラインでのskip()のパフォーマンスやメモリー使用量に問題がある場合には、BaseStream.sequential()で順次実行に切り替えるとパフォーマンスが改善される可能性があります。
      パラメータ:
      n - スキップする先頭要素の数
      戻り値:
      新しいストリーム
      例外:
      IllegalArgumentException - nが負の場合
    • takeWhile

      default LongStream takeWhile(LongPredicate predicate)
      このストリームが順序付けされている場合、指定された述語に一致するこのストリームから取得された要素の最長プレフィクスからなるストリームを返します。 そうでない場合は、このストリームが順序付けられていない場合、指定された述語に一致するこのストリームから取り出された要素のサブセットからなるストリームを返します。

      このストリームが順序付けされている場合、最長のプレフィクスは、指定された述語に一致するこのストリームの要素の連続したシーケンスです。 シーケンスの最初の要素はこのストリームの最初の要素であり、シーケンスの最後の要素の直後の要素は指定された述語と一致しません。

      このストリームが順序付けされておらず、このストリームの一部の(すべてではない)要素が指定された述語と一致する場合、この操作の動作は非決定的です。一致する要素(空のセットを含む)のサブセットを自由に取ることができます。

      このストリームのすべての要素が指定された述語に一致する場合、このストリームが順序付けられているかどうかにかかわらず、この操作ではすべての要素(結果は入力と同じです)が使用され、ストリームの要素が指定された述語に一致しない場合は(結果は空のストリームです)は使用されません。

      これは、ステートフルな短絡中間操作です。

      APIのノート:
      takeWhile()は通常、シーケンシャル・ストリーム・パイプラインでは安価な操作ですが、順序付けされたパラレル・パイプラインでは非常に高価ですが、操作は有効なプレフィクスだけでなく、エンカウンタの順序で要素の最長プレフィクスを返すように制限されています。 並べ替えられていないストリーム・ソース(generate(LongSupplier)など)を使用するか、BaseStream.unordered()で順序付け制約を削除すると、状況のセマンティクスが許せば、並列パイプラインでtakeWhile()が大幅に高速化される可能性があります。 エンカウンタ・オーダーとの一貫性が必要で、並列パイプラインでtakeWhile()のパフォーマンスやメモリー使用率が低下している場合は、BaseStream.sequential()を使用して順次実行に切り替えるとパフォーマンスが向上する可能性があります。
      実装要件:
      デフォルトの実装では、このストリームのspliteratorを取得し、そのスプライテータをラップしてこの操作のセマンティクスをトラバースでサポートし、ラップされたスプライテータに関連付けられた新しいストリームを返します。 返されたストリームはこのストリーム(BaseStream.isParallel()による並列実行または順次実行)の実行特性を保持しますが、ラップされたスプライテータは分割をサポートしないことを選択することがあります。 返されたストリームが閉じられると、返されたストリームとこのストリームのクローズ・ハンドラが呼び出されます。
      パラメータ:
      predicate - non-interferingstateless述語は、要素の最長プレフィクスを決定する要素に適用されます。
      戻り値:
      新しいストリーム
      導入されたバージョン:
      9
    • dropWhile

      default LongStream dropWhile(LongPredicate predicate)
      このストリームが順序付けされている場合は、指定された述語に一致する要素の最長プレフィクスを削除した後に、このストリームの残りの要素で構成されるストリームを返します。 そうでない場合は、このストリームが順序付けられていない場合は、指定された述語に一致する要素のサブセットを削除した後、このストリームの残りの要素からなるストリームを返します。

      このストリームが順序付けされている場合、最長のプレフィクスは、指定された述語に一致するこのストリームの要素の連続したシーケンスです。 シーケンスの最初の要素はこのストリームの最初の要素であり、シーケンスの最後の要素の直後の要素は指定された述語と一致しません。

      このストリームが順序付けされておらず、このストリームの一部の(すべてではない)要素が指定された述語と一致する場合、この操作の動作は非決定的です。一致する要素(空のセットを含む)のサブセットを自由に削除することができます。

      このストリームのすべての要素が指定された述語と一致する場合、このストリームが順序付けされているかどうかに関係なく、この操作ではすべての要素(結果は空のストリームです)が削除されるか、またはストリームの要素が指定された述語に一致しない場合、要素は削除されません(結果は入力と同じです)。

      これはステートフルな中間操作です。

      APIのノート:
      dropWhile()は通常、シーケンシャル・ストリーム・パイプラインでは安価な操作ですが、順序付けされたパラレル・パイプラインでは非常に高価ですが、操作は有効なプレフィクスだけでなく、エンカウンタの順序で要素の最長プレフィクスを返すように制限されています。 並べ替えられていないストリーム・ソース(generate(LongSupplier)など)を使用するか、BaseStream.unordered()で順序付け制約を削除すると、状況のセマンティクスが許せば、並列パイプラインでdropWhile()が大幅に高速化される可能性があります。 エンカウンタ・オーダーとの一貫性が必要で、並列パイプラインでdropWhile()のパフォーマンスやメモリー使用率が低下している場合は、BaseStream.sequential()を使用して順次実行に切り替えるとパフォーマンスが向上する可能性があります。
      実装要件:
      デフォルトの実装では、このストリームのspliteratorを取得し、そのスプライテータをラップしてこの操作のセマンティクスをトラバースでサポートし、ラップされたスプライテータに関連付けられた新しいストリームを返します。 返されたストリームはこのストリーム(BaseStream.isParallel()による並列実行または順次実行)の実行特性を保持しますが、ラップされたスプライテータは分割をサポートしないことを選択することがあります。 返されたストリームが閉じられると、返されたストリームとこのストリームのクローズ・ハンドラが呼び出されます。
      パラメータ:
      predicate - non-interferingstateless述語は、要素の最長プレフィクスを決定する要素に適用されます。
      戻り値:
      新しいストリーム
      導入されたバージョン:
      9
    • forEach

      void forEach(LongConsumer action)
      このストリームの各要素に対してアクションを実行します。

      これは終端操作です。

      並列ストリーム・パイプラインの場合、この操作は、ストリームの検出順序を考慮することを保証しません。保証すると並列性のメリットが犠牲になるからです。 与えられた任意の要素に対し、ライブラリが選択した任意のタイミングで任意のスレッド内でアクションが実行される可能性があります。 アクションが共有状態にアクセスする場合、必要な同期を提供する責任はアクションにあります。

      パラメータ:
      action - 要素に対して実行する非干渉アクション
    • forEachOrdered

      void forEachOrdered(LongConsumer action)
      このストリームの各要素に対してアクションを実行します。検出順が定義されたストリームでは、各要素が検出順に処理されることが保証されます。

      これは終端操作です。

      パラメータ:
      action - 要素に対して実行する非干渉アクション
      関連項目:
    • toArray

      long[] toArray()
      このストリームの要素を含む配列を返します。

      これは終端操作です。

      戻り値:
      このストリームの要素を含む配列
    • reduce

      long reduce(long identity, LongBinaryOperator op)
      指定された単位元の値と結合的な累積関数を使ってこのストリームの要素に対してリダクションを実行し、リデュースされた値を返します。 これは、次の操作に相当します。
      
           long result = identity;
           for (long element : this stream)
               result = accumulator.applyAsLong(result, element)
           return result;
       
      ただし、順次実行の制約が課されるわけではありません。

      identity値はアキュムレータ関数の単位元でなければいけません。 つまり、すべてのxについて、accumulator.apply(identity, x)xに等しくなります。 アキュムレータ関数は結合的な関数でなければいけません。

      これは終端操作です。

      APIのノート:
      合計、最小、最大、平均はすべて、リダクションの特殊な場合です。 数値ストリームの合計は次のように表現できます。
      
           long sum = integers.reduce(0, (a, b) -> a+b);
       
      あるいは、次のようによりコンパクトにします。
      
           long sum = integers.reduce(0, Long::sum);
       

      これは、単純にループで中間合計を更新していく方法に比べて遠回りな集計方法に見えるかもしれませんが、リダクション操作の並列化が容易に行え、並列化の際に同期を追加する必要がなく、データ競合のリスクも大幅に減少します。

      パラメータ:
      identity - 蓄積関数に対する単位元の値
      op - 2つの値を結合するための結合的非干渉およびステートレスな関数
      戻り値:
      リダクションの結果
      関連項目:
    • reduce

      結合的累積関数を使用して、このストリームの要素に対してリダクションを実行し、リダクションされた値を記述するOptionalLongを返します(ある場合)。 これは、次の操作に相当します。
      
           boolean foundAny = false;
           long result = null;
           for (long element : this stream) {
               if (!foundAny) {
                   foundAny = true;
                   result = element;
               }
               else
                   result = accumulator.applyAsLong(result, element);
           }
           return foundAny ? OptionalLong.of(result) : OptionalLong.empty();
       
      ただし、順次実行の制約が課されるわけではありません。

      アキュムレータ関数は結合的な関数でなければいけません。

      これは終端操作です。

      パラメータ:
      op - 2つの値を結合するための結合的非干渉およびステートレスな関数
      戻り値:
      リダクションの結果
      関連項目:
    • collect

      <R> R collect(Supplier<R> supplier, ObjLongConsumer<R> accumulator, BiConsumer<R,R> combiner)
      このストリームの要素に対して可変リダクション操作を実行します。 可変リダクションとは、リデュース対象の値がArrayListのような可変の結果コンテナであり、結果を置き換えるかわりに結果の状態を更新することによって要素が組み込まれるようなリダクションのことです。 これは次と同等の結果を生成します。
      
           R result = supplier.get();
           for (long element : this stream)
               accumulator.accept(result, element);
           return result;
       

      collect操作はreduce(long, LongBinaryOperator)と同様、同期を追加しなくても並列化できます。

      これは終端操作です。

      型パラメータ:
      R - 可変結果コンテナの型
      パラメータ:
      supplier - 新しい変更可能な結果コンテナを作成する関数。 並列実行の場合、この関数は複数回呼び出される可能性がありますが、そのたびに新しい値を返す必要があります。
      accumulator - associativenon-interferingstateless関数は、要素を結果コンテナに折りたたむ必要があります。
      combiner - associativenon-interferingstateless関数は、2つの部分結果コンテナを受け入れ、それらをマージします。これらのコンテナは、アキュムレータ関数と互換性がなければなりません。 コンバイナ関数は、第2の結果コンテナから第1の結果コンテナに要素を折りたたまなければなりません。
      戻り値:
      リダクションの結果
      関連項目:
    • sum

      long sum()
      このストリーム内の要素の合計を返します。 これはリダクションの特殊な場合であり、次と同等になります。
      
           return reduce(0, Long::sum);
       

      これは終端操作です。

      戻り値:
      このストリームの要素の合計
    • min

      このストリームの最小要素を記述するOptionalLong、またはこのストリームが空の場合は空のOptionalを返します。 これはリダクションの特殊な場合であり、次と同等になります。
      
           return reduce(Long::min);
       

      これは終端操作です。

      戻り値:
      このストリームの最小要素を含むOptionalLongまたは空のOptionalLong (ストリームが空の場合)
    • max

      このストリームの最大要素を記述するOptionalLong、またはこのストリームが空の場合は空のOptionalを返します。 これはリダクションの特殊な場合であり、次と同等になります。
      
           return reduce(Long::max);
       

      これは終端操作です。

      戻り値:
      このストリームの最大要素を含むOptionalLongまたは空のOptionalLong (ストリームが空の場合)
    • count

      long count()
      このストリームの要素の個数を返します。 これはリダクションの特殊な場合であり、次と同等になります。
      
           return map(e -> 1L).sum();
       

      これは終端操作です。

      APIのノート:
      ストリーム・ソースから直接カウントを計算できる場合、実装はストリーム・パイプライン(連続的または並列的に)を実行しないことを選択することがあります。 このような場合、ソース要素はトラバースされず、中間演算は評価されません。 副作用を伴う動作パラメータは、デバッグなどの無害な場合を除いては、強く推奨されません。 たとえば、次のストリームを考えてみましょう:
      
           LongStream s = LongStream.of(1, 2, 3, 4);
           long count = s.peek(System.out::println).count();
       
      ストリーム・ソースによってカバーされる要素の数は既知であり、中間操作peekはストリーム(flatMapまたはfilter操作の場合のように)に要素を注入または削除しません。 従って、カウントは4であり、パイプラインを実行する必要はなく、副作用として要素をプリント・アウトします。
      戻り値:
      このストリームの要素の個数
    • average

      OptionalDouble average()
      このストリームの要素の算術平均を記述するOptionalDoubleを返します。このストリームが空の場合は空のOptionalを返します。 これはリダクションの特殊な場合です。

      これは終端操作です。

      戻り値:
      このストリームの平均要素を含むOptionalDoubleまたは空のオプション(ストリームが空の場合)
    • summaryStatistics

      LongSummaryStatistics summaryStatistics()
      このストリームの要素に関する各種のサマリー・データを記述するLongSummaryStatisticsを返します。 これはリダクションの特殊な場合です。

      これは終端操作です。

      戻り値:
      このストリームの要素に関する各種のサマリー・データを記述するLongSummaryStatistics
    • anyMatch

      boolean anyMatch(LongPredicate predicate)
      このストリームのいずれかの要素が指定された述語に一致するかどうかを返します。 すべての要素で述語を評価するとは限りません(結果を決定するのに必要でない場合)。 ストリームが空の場合、falseが返され、述語は評価されません。

      これは短絡終端操作です。

      APIのノート:
      このメソッドは、ストリームの要素に対する述語の存在量化(あるxについてP(x))を評価します。
      パラメータ:
      predicate - ストリームの要素に適用する非干渉ステートレスな述語
      戻り値:
      指定された述語に一致する要素がストリーム内に存在する場合はtrue、そうでない場合はfalse
    • allMatch

      boolean allMatch(LongPredicate predicate)
      このストリームのすべての要素が指定された述語に一致するかどうかを返します。 すべての要素で述語を評価するとは限りません(結果を決定するのに必要でない場合)。 ストリームが空の場合、trueが返され、述語は評価されません。

      これは短絡終端操作です。

      APIのノート:
      このメソッドは、ストリームの要素に対する述語の全称量化(すべてのxについてP(x))を評価します。 ストリームが空の場合、量化は無意味に満たされると言い、(P(x)とは無関係に)常にtrueになります。
      パラメータ:
      predicate - ストリームの要素に適用する非干渉ステートレスな述語
      戻り値:
      ストリームのすべての要素が指定された述語に一致するかストリームが空の場合はtrue、それ以外の場合はfalse
    • noneMatch

      boolean noneMatch(LongPredicate predicate)
      指定された述語に一致する要素がこのストリーム内に存在しないかどうかを返します。 すべての要素で述語を評価するとは限りません(結果を決定するのに必要でない場合)。 ストリームが空の場合、trueが返され、述語は評価されません。

      これは短絡終端操作です。

      APIのノート:
      このメソッドは、ストリームの要素に対する述語の否定の全称量化(すべてのxについて~P(x))を評価します。 ストリームが空の場合、量化は無意味に満たされると言い、P(x)とは無関係に常にtrueになります。
      パラメータ:
      predicate - ストリームの要素に適用する非干渉ステートレスな述語
      戻り値:
      ストリームのどの要素も指定された述語に一致しないかストリームが空の場合はtrue、それ以外の場合はfalse
    • findFirst

      OptionalLong findFirst()
      このストリームの最初の要素を記述するOptionalLongを返します。ストリームが空の場合は空のOptionalLongを返します。 ストリームが検出順序を持たない場合は、任意の要素が返されます。

      これは短絡終端操作です。

      戻り値:
      このストリームの最初の要素を記述するOptionalLongまたは空のOptionalLong (ストリームが空の場合)
    • findAny

      OptionalLong findAny()
      ストリームの一部の要素を記述するOptionalLongを返します。ストリームが空の場合は空のOptionalLongを返します。

      これは短絡終端操作です。

      この操作の動作は明らかに非決定論的です。ストリームの任意の要素を自由に選択できます。 これは、並列処理でのパフォーマンスを最大化できるようにするためです。デメリットは、同じソースに対して呼び出すたびに、違う結果が返される可能性がある点です。 (安定した結果が必要な場合は、かわりにfindFirst()を使用してください。)

      戻り値:
      このストリームのある要素を記述するOptionalLongまたは空のOptionalLong (ストリームが空の場合)
      関連項目:
    • asDoubleStream

      DoubleStream asDoubleStream()
      このストリームの要素をdoubleに変換した結果から構成されるDoubleStreamを返します。

      これは中間操作です。

      戻り値:
      このストリームの要素をdoubleに変換した結果から構成されるDoubleStream
    • boxed

      Stream<Long> boxed()
      ストリームの各要素をLongにボクシングした結果から構成されるStreamを返します。

      これは中間操作です。

      戻り値:
      ストリームの各要素をLongにボクシングした結果から構成されるStream
    • builder

      static LongStream.Builder builder()
      LongStreamのビルダーを返します。
      戻り値:
      ストリーム・ビルダー
    • empty

      static LongStream empty()
      空の順次LongStreamを返します。
      戻り値:
      空の順次ストリーム
    • of

      static LongStream of(long t)
      単一要素を含む順次LongStreamを返します。
      パラメータ:
      t - 単一要素
      戻り値:
      単一要素の順次ストリーム
    • of

      static LongStream of(long... values)
      指定された値を要素に持つ、順序付けされた順次ストリームを返します。
      パラメータ:
      values - 新しいストリームの要素
      戻り値:
      新しいストリーム
    • iterate

      static LongStream iterate(long seed, LongUnaryOperator f)
      初期要素seedに関数fを繰り返し適用することで生成される、順序付けされた無限順次LongStreamを返します(seedf(seed)f(f(seed))、といった要素から成るStreamが生成される)。

      LongStreamの最初の要素(位置0)は、指定されたseedになります。 n > 0の場合、位置nの要素は、位置n - 1の要素に関数fを適用した結果になります。

      fを1つの要素に適用するアクションhappens-beforeは、後続の要素にfを適用するアクションです。 どのような要素に対しても、ライブラリが選択するどのスレッドでもアクションを実行できます。

      パラメータ:
      seed - 初期要素
      f - 新しい要素を生成するために前の要素に適用される関数
      戻り値:
      新しい順次LongStream
    • iterate

      static LongStream iterate(long seed, LongPredicate hasNext, LongUnaryOperator next)
      指定されたnext関数を初期要素に反復適用することによって生成され、与えられたhasNext述語を満たすことを条件とする、順次順序付けされたLongStreamを返します。 ストリームは、hasNext述部がfalseを返すとすぐに終了します。

      LongStream.iterateは、対応するforループによって生成されるものと同じシーケンスを生成する必要があります:

      
           for (long index=seed; hasNext.test(index); index = next.applyAsLong(index)) {
               ...
           }
       

      hasNext述部がシード値を保持しない場合、結果のシーケンスは空になることがあります。 それ以外の場合、最初の要素は指定されたseed値になります。次の要素(存在する場合)は、next関数をseed値に適用した結果、hasNext述語がストリームを終了する必要があることを示すまで繰り返されます。

      hasNext述語を要素happens-beforeに適用するアクション。その要素にnext関数を適用するアクション。 1つの要素happens-beforenext関数を適用するアクション。後続の要素にhasNext述語を適用するアクション。 任意の要素に対して、ライブラリが選択したどのスレッドでもアクションを実行できます。

      パラメータ:
      seed - 初期要素
      hasNext - ストリームを終了する必要があるかどうかを判断する要素に適用する述語。
      next - 新しい要素を生成するために前の要素に適用される関数
      戻り値:
      新しい順次LongStream
      導入されたバージョン:
      9
    • generate

      static LongStream generate(LongSupplier s)
      指定されたLongSupplierによって生成される要素を含む、順序付けされていない無限順次ストリームを返します。 これは、定数ストリームやランダムな要素から成るストリームなどを生成するのに適しています。
      パラメータ:
      s - 要素を生成するためのLongSupplier
      戻り値:
      順序付けされていない新しい無限順次LongStream
    • range

      static LongStream range(long startInclusive, long endExclusive)
      startInclusive(含む)からendExclusive(含まない)の範囲でステップ1でインクリメントした値を含む、順序付けされた順次LongStreamを返します。
      APIのノート:

      同等の増加する値のシーケンスは、次のようなforループを使って順次的に生成できます。

      
           for (long i = startInclusive; i < endExclusive ; i++) { ... }
       

      パラメータ:
      startInclusive - 初期値(この値を含む)
      endExclusive - 上限(この値を含まない)
      戻り値:
      long要素の範囲に対する順次LongStream
    • rangeClosed

      static LongStream rangeClosed(long startInclusive, long endInclusive)
      startInclusive(含む)からendInclusive(含む)の範囲でステップ1でインクリメントした値を含む、順序付けされた順次LongStreamを返します。
      APIのノート:

      同等の増加する値のシーケンスは、次のようなforループを使って順次的に生成できます。

      
           for (long i = startInclusive; i <= endInclusive ; i++) { ... }
       

      パラメータ:
      startInclusive - 初期値(この値を含む)
      endInclusive - 上限(この値を含む)
      戻り値:
      long要素の範囲に対する順次LongStream
    • concat

      static LongStream concat(LongStream a, LongStream b)
      最初のストリームの全要素と2番目のストリームの全要素を連結したものを要素に持つ、遅延連結ストリームを作成します。 結果のストリームが順序付けされるのは、入力ストリームがどちらも順序付けされている場合であり、並列的になるのは、入力ストリームのどちらかが並列的な場合です。 結果のストリームのクローズ時には、両方の入力ストリームのクローズ・ハンドラが呼び出されます。

      このメソッドは2つの入力ストリームで動作し、各ストリームをそのソースにバインドします。 その結果、入力ストリーム・ソースへのその後の変更は、連結ストリーム結果に反映されないことがあります。

      APIのノート:
      最適化の機会を保持するために、このメソッドは各ストリームをそのソースにバインドし、パラメータとして2つのストリームのみを受け入れます。 例えば、各入力ストリーム・ソースの正確なサイズが分かっている場合、連結ストリーム・ソースの正確なサイズを計算することができます。 バインディングなしでストリームを連結する場合、またはこのメソッドへのネストされた呼び出しを行わない場合は、ストリームのストリームを作成し、アイデンティティ関数を使用してフラット・マッピングしてみてください:
      
           LongStream concat = Stream.of(s1, s2, s3, s4).flatMapToLong(s -> s);
       
      実装上のノート:
      連結を繰り返すことでストリームを構築する際には注意が必要です。 深く連結されたストリームの要素にアクセスすると、深い呼び出しチェーンやStackOverflowErrorが発生する可能性があります。
      パラメータ:
      a - 最初のストリーム
      b - 2番目のストリーム
      戻り値:
      2つの入力ストリームを連結したもの