[図書][モダンジャワ動作]-Streamの紹介


Streamとは?


ソースから抽出された連続要素は、データ処理演算をサポートします.

特長


  • 連続要素:ストリームは、特定の要素形式で構成された連続値セットのインタフェースを提供します.

  • 集合の主な機能はデータの格納とアクセスであり、ストリームの主な機能は式(filter、sorded、map)である.

  • ≪ソース|Source|oem_src≫:ストリームは、集合、アレイ、I/Oリソースなどのデータ提供元からデータを消費します.

  • データ処理演算:関数プログラミング言語で通常サポートされる演算とデータベースに類似した演算をサポートします.filter、map、reduce、find、match、sortなどの操作データを使用して、ストリーム演算を順次または並列に実行できます.データ処理プロセスを並列化する場合は、スレッドやロックを心配する必要はありません.性能が向上する.

  • パイプライナー:ほとんどのストリーム演算はストリーム自体に戻り、ストリーム演算間の接続が巨大なパイプラインを構成します.複雑なデータ処理パイプラインを作成できます.複数の演算をパイプラインに接続しても、可読性と明確性は維持されます.組み立てることができるので柔軟性がよくなりました.

  • ≪内部繰返し|Internal Repeat|emdw≫:コレクションは繰返し文字を使用して明示的に繰り返され、ストリームは内部繰返しをサポートします.

  • 宣言形式でコードを実現できるので、より簡潔で可読性が向上します.ループやif条件の問題などの制御をどのように使用するかを指定することなく、特定の動作の実行を指定できます.

  • 変化する要求に簡単に対応できる.ランダ式を利用するには流のフィルターを変えるだけでいいです.
  • ストリームの例

    List<String> threeHighCaloricDishNames =
    	menu.stream() // 스트림을 얻어서
        	    .fliter(dish -> dish.getCalories() > 300) // 300칼로리보다 높은 칼로리를 가진 요리 필터링
                .map(Dish::getName) // 필터링 후 남은 요리 이름 추출
                .limit(3) // 앞의 3개만 선택
                .collect(toList()); // 결과를 리스트로 저장
    データソース(menu)は、連続する要素をストリームに提供し、filter、map、limit、collectのデータ処理演算に適用します.
    このとき、collect以外の演算はstreamを返し、互いにパイプラインを形成する.
    collect演算は、ストリームを返さずにパイプラインを処理することによって結果を返します.collectを呼び出すまで演算は実行されません.

  • filter:ランダをパラメータとして受け入れ、ストリームから特定の要素をフィルタします.ストリームを返します.

  • map:ramdaを使用して、ある要素を別の要素に変換するか、情報を抽出します.ストリームを返します.

  • Limit:指定した数を超える要素がストリームに格納されないように、ストリームサイズを縮小します.ストリームを返します.

  • collect:ストリームを別のフォーマットに変換します.様々な変換方法を引数として受け入れ、ストリーム内の残りの要素を特定の結果に変換します.
  • ストリームとコレクション


    ストリームとコレクションは、連続要素タイプ値を格納するデータ構造インタフェースを提供し、値に順次アクセスします.しかし、違いもある.

    データ計算ポイント


  • コレクションは、現在のデータ構造に含まれるすべての値をメモリに格納するデータ構造です.つまり、コレクション内のすべての要素は、コレクションに追加する前に計算する必要があります.

  • ストリームは,要求時にのみ要素を計算する固定的な資料構造である.ストリームに要素を追加したり、ストリームから要素を削除したり、ストリームから要素を削除したりすることはできません.ユーザー要求の値は、ストリームからのみ抽出されます.
  • 繰り返し回数

  • ストリームは1回しか探索できません.検索されたストリームが消費されます.検索したストリームを再度参照する場合は、新しいストリームを作成する必要があります.
  • 外部繰返しと内部繰返し


  • コレクションインタフェースを使用するには、for-each文などの直接繰り返し要素を使用する必要があります.これを外部反復と呼ぶ.並列性を自分で管理する.

  • ストリームは内部反復を使用して反復を処理し、結果ストリーム値をある場所に格納します.重複者は必要ありません.開発者は重複プロセスを気にする必要はありません.内部反復は、タスクを透過的に並列に処理したり、異なる順序でタスクを処理したりすることができます.
  • フロー演算


    ストリームは主に2つの演算から構成される.戻りストリーム形成パイプラインの中間演算と、パイプラインを実行した後にストリームを閉じる最終演算からなる.

    ちゅうかんえんざん


    上記の例では、filter、map、limitなどが中間演算である.複数の中間演算を接続することでパイプラインを形成することができる.

    さいしゅうえんざん


    上記の例では、表示されるストリームをリストとするcollectが最終的な演算です.最終演算は、パイプラインからストリーム以外の結果をエクスポートします.
    中間演算は怠惰なので、最終演算を実行するまで演算は実行されません.
    最終演算を実行すると、データ内の各要素はパイプラインを通ります.すなわち、すべてのデータ要素がフィルタリングされた後、すべてのデータ要素はmapではなく、データ要素がフィルタとmapを順次通過する.

    フロー使用プロセス

  • クエリーのデータソース(ex.コレクション)
  • 構成
  • パイプラインの中間演算接続
  • のパイプラインを実行し、結果を生成する最終演算