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