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, unorderedIntStream 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()
IntSummaryStatisticsboolean 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に変換した結果から構成されるLongStreamDoubleStream asDoubleStream()
doubleに変換した結果から構成されるDoubleStreamIntStream 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つ前の要素に適用される関数IntStreamstatic IntStream generate(IntSupplier s)
IntSupplierによって生成される要素を含む、順序付けされていない無限順次ストリームを返します。これは、定数ストリームやランダムな要素から成るストリームなどを生成するのに適しています。s - 要素を生成するためのIntSupplierIntStreamstatic IntStream range(int startInclusive, int endExclusive)
startInclusive(含む)からendExclusive(含まない)の範囲でステップ1でインクリメントした値を含む、順序付けされた順次IntStreamを返します。同等の増加する値のシーケンスは、次のようなforループを使って順次的に生成できます。
for (int i = startInclusive; i < endExclusive ; i++) { ... }
startInclusive - 初期値(この値を含む)endExclusive - 上限(この値を含まない)int要素の範囲に対する順次IntStreamstatic IntStream rangeClosed(int startInclusive, int endInclusive)
startInclusive(含む)からendInclusive(含む)の範囲でステップ1でインクリメントした値を含む、順序付けされた順次IntStreamを返します。同等の増加する値のシーケンスは、次のようなforループを使って順次的に生成できます。
for (int i = startInclusive; i <= endInclusive ; i++) { ... }
startInclusive - 初期値(この値を含む)endInclusive - 上限(この値を含む)int要素の範囲に対する順次IntStreamstatic IntStream concat(IntStream a, IntStream b)
StackOverflowExceptionが発行される可能性さえあります。a - 最初のストリームb - 2番目のストリーム バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.