「Javaのコア技術の第2巻高度な機能」A

第一章のJava SE 8ストリームライブラリ

定義の流れ

仮説、インスタンスのリストなどの単語(一覧)クラス、今店舗すべての本の中の単語、とは長い単語の統計を予約する必要がある
一般的な反復法

長い、カウント= 0;
用(文字列W:ワード){
IF(w.length()> 12)のカウント++。
}

ストリームを使用すると、方法

長い= words.stream()フィルタ(W-> w.length()> 12).count()数えます。

ここで、ストリーム方式は、単語のリストについては、ストリーム(ストリーム)を生成する;フィルタ方法は、12よりワード長より大きいを含む別のストリームを返し、
COUNTの方法は、ストリームの結果として、簡略化します。

だから、何が流れていますか?この本は、「私たちがコンセプトのコレクションよりも高いレベルで計算されたデータを指定することができるように流れビューを提供します。」と言います
それは単なる一例、比較反復だ「という行う方法よりも、何をすべきか」の原則に従うフロー、ストリームは、特定の作業のリストを介してこれを達成するための方法を指定する必要はありません。

ストリームを作成します

あなたは配列を持っている場合は、静的メソッドStream.ofを使用することができます

ストリームの<string>曲= Stream.of( "穏やか"、 "下"、 ""、 "ストリーム")。

使用Array.stream(へ、からの配列は、)(付属)から配列から設置することができ、要素を作成する要素(含まない)に
、ストリームの任意の要素が含まれていませんを作成するには、あなたは(Stream.emptyを使用することができます) ;
ストリーム無限ストリームを生成するための2つの静的メソッドがあります反復メソッドおよびメソッドを生成します

転流

転流は、その要素が別のフロー要素から誘導される、新たなストリームを生成する
、例えば、変換フィルタは、その要素が特定の条件に一致すると、ストリーム生成
、ストリーム変換マップ等flatMapと同様に達成することができますマップを使用する場合、機能は、各要素に適用され、結果として生成された関数を適用した後、すべての結果を含む流れは
、我々は、文字列ストリームをマッピングする方法を持っているとします。

ストリーム<ストリームの<string >>結果= words.stream()(()W W->文字)をマップ。

その後のようなストリームを含むストリームを得る[... [ "Y"、 " O"、 "U"、 "R"]、[ "B"、 "O"、 ""、 "T"]。 ..]。
文字の流れを平坦化するために、方法が使用されてもよいflatMap

ストリーム<ストリング>結果= words.stream()flatMap(W->()w文字)。

得られた結果は次のとおり[... "Y"、 "O"、 "U"、 "R&LT"、 "B"、 "O"、 "A"、 "T"、...]
stream.limit(N- )n個の要素の前端その後新しいストリーム、戻り
stream.skip(N)は、新しいフローを返すだろうが、しかし、最初のn個の要素を破棄する
静的接触方法は、2つの接続されたストリームクラスストリームであろう
異なる方法は、ストリームを返すが、重複する要素を排除する
ソートする方法対流要素を使用してソートすることができます

シンプルな削減

すなわち、動作の終了が低減方法データストリームから回答を得ることであり、それらは、非還元電流値に流入するプログラムで使用することができる
回数ストリーム内の要素の数を返す方法の一例である
削減残りが最大と最小、最大値と最小値返す
関数は、FindFirst、findAny、anyMatch、allMatch、使用するための定期的なストリーム変換方法と同様にフィルタを noneMatch 方法
これらのメソッドによって返されるタイプオプション<T>の値でありますそれはどちらかの答えをラップまたは値なしであることを示します

この時点で、我々は、すなわち、典型的なプロセス・フロー・オペレーションを導入する:
    1.ストリームを作成する
    ステップを複数含んでいてもよい、別のストリームに中間ストリームの初期動作を指定2.
    結果をもたらす動作を終了3.アプリケーション

収集結果

ときに要素を表示するか、収集特定のデータ構造にストリーム要素に流れるように意図されている場合は、フローを処理した後(例えば、アレイ、コレクション、およびマップ)は
、元素のストリームから成るアレイToArrayメソッドを取得するために呼び出すことができます

文字列[]結果= stream.toArray(文字列::新しいです);

しかし、正しいタイプと所望の場合のtoArrayメソッド戻りオブジェクト[]配列は、配列のコンストラクタに渡すことができます

添加ToArrayメソッドでは、利用可能な便利な方法は、リストとして、収集ある濃縮物の流れを収集するために、または

リストの<string>結果= stream.collect(Collectors.toList())。
//或者
設定<文字列>結果= stream.collect(Collectors.toSet());

この方法はまたCollectors.toMapは、マッピングテーブルに回収フローを利用することができる
toMap処理要素プライマーはキーと値のマッピングテーブルを生成するために使用される2つの機能を有しています

また、この方法はまた、グループにまとめ、同じ特性値を持つgroupingbyするために使用することができ、groupingby方法は、マッピングテーブルを生成する、値のリストで、それぞれが
あなたがこれらのリストを処理するためのいくつかの方法をしたい場合は、 「下流コレクター」を提供することが必要です

基本的なタイプは、並行して流れをストリーミングし、

基本のようなストリームの種類、:IntStream、LongStreamとDoublestream
IntStreamを作成するには、とArrays.Stream方法はIntStream.ofを呼び出す必要があります

IntStreamストリーム= IntStream.of(1,1,2,3,5)。
ストリーム= Arrays.Stream(に、の値)。

並行流は、
    並流のセットのいずれかから取得するCollection.parallelStream()メソッドを使用することができる
    方法は、終了時に行われる限り、パラレルモードでストリームは、すべての中間の操作が並列化されるように

おすすめ

転載: www.cnblogs.com/ASE265/p/12264501.html