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