中間操作
取り出したストリームの要素に加える処理のこと。フィルタリング、ソートなどの操作がある。
中間操作は、新しいストリームを返し、元のストリームは変更されない。これにより、パイプライン処理を実現し、効率的なデータ操作を行うことができる。
中間操作の例
-
distinct()
: ストリーム内の重複した要素を削除する。重複した要素があるときは最初の要素のみが新しいストリームに含まれる -
filter(Predicate<T> predicate)
: 指定された条件に基づいて要素をフィルタリングする。条件に合致する要素だけ新しいストリームに含まれる -
map(Function<T, R> mapper)
: 要素を指定された関数によって変換する。各要素は関数によって変換され変換後に新しいストリームが生成される -
sorted()
: 要素をデフォルトの順序(自然順序)でソートする。要素がcomparebleインターフェースを実装している場合その順序によってソートされる -
sorted(Comparator<? super T> comparater)
: ストリームの要素を指定されたComparatorに従ってソートした結果から構成されるストリーム -
peek(Consumer<? super T>)
: 最終結果を出す前の途中経過を表示できる。デバックやログ出力、要素の状態観察や変更をする場合に使用される。 -
limit(long maxSize)
: ストリームの要素をmaxSize以内の長さに切り詰めた結果から成るストリームを生成 -
skip(long n)
: ストリームの最初のn個までの要素を破棄し、残りの要素で構成されるストリームを生成
終端操作の概要
中間操作を終えたストリームの集合に対して行う最終処理
終端操作の例
-
forEach(Consumer<T> action)
: ストリームの各要素に対して指定されたアクションを実行する。Consumer型の引数を受け取るため、要素を単純に処理するだけで、戻り値は戻さない。ストリーム内の要素をコレクションが保持している順
に処理する -
collect(collect<T,A,R> collector)
: ストリームの要素を収集して、新しいコレクションや値を生成する。Collectorオブジェクトを使用して要素をまとめる方法や結果を生成する方法を指定する -
count()
: ストーリー無の要素の数を数える。長さや要素の個数を数える -
reducu(BinaryOperator<T>, accumulator)
: ストリームの要素を結合し、単一の結果を生成する。要素を繰り返し結合するための累積関数を指定する -
finfAny()
: ストリームから任意の要素を取得する。並列処理の際には、常に同じ要素を返す保証はない
-
findfirst()' : ストリームの最初の要素を取得する。並列処理の際には、処理の順序によって
常に最初の要素が返される`
リダクション操作
リダクションとは一連の要素を1つにまとめる操作、もしくはリストの要素に何らかの処理を加え、その結果を別のリストにまとめる操作のこと。
- reduceメソッド:値を累積的に結合していく関数を実行する
- min():最小値を求める
- max():最大値を求める
終端操作のメソッドは1回しか呼び出すことができない。2回呼び出そうとすると、illegalStateExceptionがスローされる。