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