public interface IntStream extends 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のパッケージ・ドキュメントを参照してください。Stream
, java.util.stream修飾子と型 | インタフェースと説明 |
---|---|
static interface |
IntStream.Builder
IntStream の可変ビルダーです。 |
修飾子と型 | メソッドと説明 |
---|---|
boolean |
allMatch(IntPredicate predicate)
このストリームのすべての要素が指定された述語に一致するかどうかを返します。
|
boolean |
anyMatch(IntPredicate predicate)
このストリームのいずれかの要素が指定された述語に一致するかどうかを返します。
|
DoubleStream |
asDoubleStream()
このストリームの要素を
double に変換した結果から構成されるDoubleStream を返します。 |
LongStream |
asLongStream()
このストリームの要素を
long に変換した結果から構成されるLongStream を返します。 |
OptionalDouble |
average()
このストリームの要素の算術平均を記述する
OptionalDouble または空のOptional (このストリームが空の場合)を返します。 |
Stream<Integer> |
boxed()
ストリームの各要素を
Integer にボクシングした結果から構成されるStream を返します。 |
static IntStream.Builder |
builder()
IntStream のビルダーを返します。 |
<R> R |
collect(Supplier<R> supplier, ObjIntConsumer<R> accumulator, BiConsumer<R,R> combiner)
このストリームの要素に対して可変リダクション操作を実行します。
|
static IntStream |
concat(IntStream a, IntStream b)
最初のストリームの全要素と2番目のストリームの全要素を連結したものを要素に持つ、遅延連結ストリームを作成します。
|
long |
count()
このストリームの要素の個数を返します。
|
IntStream |
distinct()
このストリームの重複を除いた要素から構成されるストリームを返します。
|
static IntStream |
empty()
空の順次
IntStream を返します。 |
IntStream |
filter(IntPredicate predicate)
このストリームの要素のうち、指定された述語に一致するものから構成されるストリームを返します。
|
OptionalInt |
findAny()
ストリームのある要素を記述する
OptionalInt または空のOptionalInt (ストリームが空の場合)を返します。 |
OptionalInt |
findFirst()
このストリームの最初の要素を記述する
OptionalInt または空のOptionalInt (ストリームが空の場合)を返します。 |
IntStream |
flatMap(IntFunction<? extends IntStream> mapper)
このストリームの各要素をマップされたストリーム(指定されたマッピング関数を各要素に適用することで得られる)の内容で置き換えた結果から成るストリームを返します。
|
void |
forEach(IntConsumer action)
このストリームの各要素に対してアクションを実行します。
|
void |
forEachOrdered(IntConsumer action)
このストリームの各要素に対してアクションを実行します。検出順が定義されたストリームでは、各要素が検出順に処理されることが保証されます。
|
static IntStream |
generate(IntSupplier s)
指定された
IntSupplier によって生成される要素を含む、順序付けされていない無限順次ストリームを返します。 |
static IntStream |
iterate(int seed, IntUnaryOperator f)
初期要素
seed に関数f を繰り返し適用することで生成される、順序付けされた無限順次IntStream を返します(seed 、f(seed) 、f(f(seed)) 、といった要素から成るStream が生成される)。 |
PrimitiveIterator.OfInt |
iterator()
このストリームの要素のイテレータを返します。
|
IntStream |
limit(long maxSize)
このストリームの要素を
maxSize 以内の長さに切り詰めた結果から成るストリームを返します。 |
IntStream |
map(IntUnaryOperator mapper)
このストリームの要素に指定された関数を適用した結果から構成されるストリームを返します。
|
DoubleStream |
mapToDouble(IntToDoubleFunction mapper)
このストリームの要素に指定された関数を適用した結果から構成される
DoubleStream を返します。 |
LongStream |
mapToLong(IntToLongFunction mapper)
このストリームの要素に指定された関数を適用した結果から構成される
LongStream を返します。 |
<U> Stream<U> |
mapToObj(IntFunction<? extends U> mapper)
指定された関数をこのストリームの要素に適用した結果から構成される、オブジェクト値の
Stream を返します。 |
OptionalInt |
max()
このストリームの最大要素を記述する
OptionalInt または空のOptional (このストリームが空の場合)を返します。 |
OptionalInt |
min()
このストリームの最小要素を記述する
OptionalInt または空のOptional (このストリームが空の場合)を返します。 |
boolean |
noneMatch(IntPredicate predicate)
指定された述語に一致する要素がこのストリーム内に存在しないかどうかを返します。
|
static IntStream |
of(int... values)
指定された値を要素に持つ、順序付けされた順次ストリームを返します。
|
static IntStream |
of(int t)
単一要素を含む順次
IntStream を返します。 |
IntStream |
parallel()
同等の並列ストリームを返します。
|
IntStream |
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 を返します。 |
OptionalInt |
reduce(IntBinaryOperator op)
|
int |
reduce(int identity, IntBinaryOperator op)
|
IntStream |
sequential()
同等の順次ストリームを返します。
|
IntStream |
skip(long n)
このストリームの最初の
n 個の要素を破棄した残りの要素で構成されるストリームを返します。 |
IntStream |
sorted()
このストリームの要素で構成されるストリームをソートされた順序で返します。
|
Spliterator.OfInt |
spliterator()
このストリームの要素のスプリッテレータを返します。
|
int |
sum()
このストリーム内の要素の合計を返します。
|
IntSummaryStatistics |
summaryStatistics()
このストリームの要素に関する各種のサマリー・データを記述する
IntSummaryStatistics を返します。 |
int[] |
toArray()
このストリームの要素を含む配列を返します。
|
close, isParallel, onClose, unordered
IntStream filter(IntPredicate predicate)
これは中間操作です。
IntStream map(IntUnaryOperator mapper)
これは中間操作です。
<U> Stream<U> mapToObj(IntFunction<? extends U> mapper)
Stream
を返します。
これは中間操作です。
LongStream mapToLong(IntToLongFunction mapper)
LongStream
を返します。
これは中間操作です。
DoubleStream mapToDouble(IntToDoubleFunction mapper)
DoubleStream
を返します。
これは中間操作です。
IntStream flatMap(IntFunction<? extends IntStream> mapper)
クローズ
されます。(マップ先ストリームがnull
の場合はかわりに空のストリームが使用されます。)
これは中間操作です。
mapper
- 新しい値のIntStream
を生成するために各要素に適用する、非干渉でステートレスな関数Stream.flatMap(Function)
IntStream distinct()
これはステートフルな中間操作です。
IntStream sorted()
これはステートフルな中間操作です。
IntStream peek(IntConsumer action)
これは中間操作です。
並列ストリーム・パイプラインの場合、上流の操作によって用意された各要素に対し、任意のタイミングで任意のスレッド内でアクションが呼び出される可能性があります。アクションが共有状態を変更する場合、必要な同期を提供する責任はアクションにあります。
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();
action
- ストリームから消費される要素に対して実行すべき非干渉アクションIntStream limit(long maxSize)
maxSize
以内の長さに切り詰めた結果から成るストリームを返します。
これは、ステートフルな短絡中間操作です。
limit()
は、順次ストリーム・パイプラインでは一般に低コストの操作ですが、順序付けされた並列パイプラインではコストが非常に高くなる可能性があります(特にmaxSize
の値が大きい場合)。任意のn個の要素を返すだけでなく、検出順での最初のn個の要素を返さなければいけない、という制約がlimit(n)
に課されるからです。状況のセマンティックスが許せば、順序付けされていないストリーム・ソース(generate(IntSupplier)
など)を使用するか、BaseStream.unordered()
で順序付けの制約をなくせば、並列パイプラインのlimit()
が大幅に高速化される可能性があります。検出順序との整合性が必要で、かつ並列パイプラインでのlimit()
のパフォーマンスやメモリー使用量に問題がある場合には、sequential()
で順次実行に切り替えるとパフォーマンスが改善される可能性があります。maxSize
- ストリームの要素数の上限IllegalArgumentException
- maxSize
が負の場合IntStream skip(long n)
n
個の要素を破棄した残りの要素で構成されるストリームを返します。このストリームに含まれる要素の数がn
個より少ない場合は、空のストリームが返されます。
これはステートフルな中間操作です。
skip()
は、順次ストリーム・パイプラインでは一般に低コストの操作ですが、順序付けされた並列パイプラインではコストが非常に高くなる可能性があります(特にn
の値が大きい場合)。任意のn個の要素をスキップするだけでなく、検出順での最初のn個の要素をスキップしなければいけない、という制約がskip(n)
に課されるからです。状況のセマンティックスが許せば、順序付けされていないストリーム・ソース(generate(IntSupplier)
など)を使用するか、BaseStream.unordered()
で順序付けの制約をなくせば、並列パイプラインのskip()
が大幅に高速化される可能性があります。検出順序との整合性が必要で、かつ並列パイプラインでのskip()
のパフォーマンスやメモリー使用量に問題がある場合には、sequential()
で順次実行に切り替えるとパフォーマンスが改善される可能性があります。n
- スキップする先頭要素の数IllegalArgumentException
- n
が負の場合void forEach(IntConsumer action)
これは終端操作です。
並列ストリーム・パイプラインの場合、この操作は、ストリームの検出順序を考慮することを保証しません。保証すると並列性のメリットが犠牲になるからです。与えられた任意の要素に対し、ライブラリが選択した任意のタイミングで任意のスレッド内でアクションが実行される可能性があります。アクションが共有状態にアクセスする場合、必要な同期を提供する責任はアクションにあります。
action
- 要素に対して実行する非干渉アクションvoid forEachOrdered(IntConsumer action)
これは終端操作です。
action
- 要素に対して実行する非干渉アクションforEach(IntConsumer)
int[] toArray()
これは終端操作です。
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
に等しくなります。アキュムレータ
関数は結合的な関数でなければいけません。
これは終端操作です。
int sum = integers.reduce(0, (a, b) -> a+b);
あるいは、次のようによりコンパクトにします。
int sum = integers.reduce(0, Integer::sum);
これは、単純にループで中間合計を更新していく方法に比べて遠回りな集計方法に見えるかもしれませんが、リダクション操作の並列化が容易に行え、並列化の際に同期を追加する必要がなく、データ競合のリスクも大幅に減少します。
identity
- 蓄積関数に対する単位元の値op
- 2つの値を結合するための結合的、非干渉およびステートレスな関数sum()
, min()
, max()
, average()
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)
<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)
と同様、同期を追加しなくても並列化できます。
これは終端操作です。
int sum()
OptionalInt min()
OptionalInt
または空のOptional (このストリームが空の場合)を返します。これはリダクションの特殊な場合であり、次と同等になります。
return reduce(Integer::min);
これは終端操作です。
OptionalInt
または空のOptionalInt
(ストリームが空の場合)OptionalInt max()
OptionalInt
または空のOptional (このストリームが空の場合)を返します。これはリダクションの特殊な場合であり、次と同等になります。
return reduce(Integer::max);
これは終端操作です。
OptionalInt
または空のOptionalInt
(ストリームが空の場合)long count()
OptionalDouble average()
OptionalDouble
または空のオプション(ストリームが空の場合)IntSummaryStatistics summaryStatistics()
IntSummaryStatistics
boolean anyMatch(IntPredicate predicate)
false
が返され、述語は評価されません。
これは短絡終端操作です。
boolean allMatch(IntPredicate predicate)
true
が返され、述語は評価されません。
これは短絡終端操作です。
boolean noneMatch(IntPredicate predicate)
true
が返され、述語は評価されません。
これは短絡終端操作です。
OptionalInt findFirst()
OptionalInt
または空のOptionalInt
(ストリームが空の場合)を返します。ストリームが検出順序を持たない場合は、任意の要素が返されます。
これは短絡終端操作です。
OptionalInt
または空のOptionalInt
(ストリームが空の場合)OptionalInt findAny()
OptionalInt
または空のOptionalInt
(ストリームが空の場合)を返します。
これは短絡終端操作です。
この操作の動作は明らかに非決定論的です。ストリームの任意の要素を自由に選択できます。これは、並列処理でのパフォーマンスを最大化できるようにするためです。デメリットは、同じソースに対して呼び出すたびに、違う結果が返される可能性がある点です。(安定した結果が必要な場合は、かわりにfindFirst()
を使用してください。)
OptionalInt
または空のOptionalInt
(ストリームが空の場合)findFirst()
LongStream asLongStream()
long
に変換した結果から構成されるLongStream
DoubleStream asDoubleStream()
double
に変換した結果から構成されるDoubleStream
IntStream sequential()
BaseStream
これは中間操作です。
sequential
、インタフェース BaseStream<Integer,IntStream>
IntStream parallel()
BaseStream
これは中間操作です。
parallel
、インタフェース BaseStream<Integer,IntStream>
PrimitiveIterator.OfInt iterator()
BaseStream
これは終端操作です。
iterator
、インタフェース BaseStream<Integer,IntStream>
Spliterator.OfInt spliterator()
BaseStream
これは終端操作です。
spliterator
、インタフェース BaseStream<Integer,IntStream>
static IntStream.Builder builder()
IntStream
のビルダーを返します。static IntStream empty()
IntStream
を返します。static IntStream of(int t)
IntStream
を返します。t
- 単一要素static IntStream of(int... values)
values
- 新しいストリームの要素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
を適用した結果になります。
seed
- 初期要素f
- 新しい要素を生成するために1つ前の要素に適用される関数IntStream
static IntStream generate(IntSupplier s)
IntSupplier
によって生成される要素を含む、順序付けされていない無限順次ストリームを返します。これは、定数ストリームやランダムな要素から成るストリームなどを生成するのに適しています。s
- 要素を生成するためのIntSupplier
IntStream
static IntStream range(int startInclusive, int endExclusive)
startInclusive
(含む)からendExclusive
(含まない)の範囲でステップ1
でインクリメントした値を含む、順序付けされた順次IntStream
を返します。同等の増加する値のシーケンスは、次のようなfor
ループを使って順次的に生成できます。
for (int i = startInclusive; i < endExclusive ; i++) { ... }
startInclusive
- 初期値(この値を含む)endExclusive
- 上限(この値を含まない)int
要素の範囲に対する順次IntStream
static IntStream rangeClosed(int startInclusive, int endInclusive)
startInclusive
(含む)からendInclusive
(含む)の範囲でステップ1
でインクリメントした値を含む、順序付けされた順次IntStream
を返します。同等の増加する値のシーケンスは、次のようなfor
ループを使って順次的に生成できます。
for (int i = startInclusive; i <= endInclusive ; i++) { ... }
startInclusive
- 初期値(この値を含む)endInclusive
- 上限(この値を含む)int
要素の範囲に対する順次IntStream
static IntStream concat(IntStream a, IntStream b)
StackOverflowException
が発行される可能性さえあります。a
- 最初のストリームb
- 2番目のストリーム バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.