Modern Java in Action #4
7406 ワード
ストリームの概要
ストリームはjava 8 APIに追加された機能であり、コードを宣言形式で実現することができる.
さらに、ストリームは、マルチスレッドコードを実装することなく、データを透過的に並列処理することができる.
ストリームは、データ処理演算をサポートするためにソースから抽出された連続要素です.
1つ目はパイプライナーで、ほとんどのストリーム演算は自分のストリームに戻り、ストリーム演算間に接続を確立し、巨大なパイプライン(メソッドボディ)を構成する.
2つ目は、内部反復です.これは、反復を自分で処理し、結果ストリーム値をある場所に格納する機能を備えています.
import static java.util.stream.Collectors.toList;
List<String> dishName =
menu.stream() // menu로부터 스트림을 얻는다.
.filter(dish -> dish.getCalories() > 300) // 해당 람다식에 해당하는 것들만 통과시킨다.
.map(Dish::getName)
.limit(3) //선착순 세 개만 선택하는데, 이를 통해 내부적으로 최적화를 수행할 수 있다.
.collect(toList()); // 현재 예시에서,해당 메서드를 호출하기 전까지는 아무것도 수행되지 않는다.
中間演算と最終演算
List<String> names = menu.stream()
.filter(dish -> dish.getCalories() > 300) //중간 연산
.map(Dish::getName) //중간 연산
.limit(3) //중간 연산
.collect(toList()); //최종 연산
ちゅうかんえんざん
中間演算とは,メソッドの結果値がstreamに戻ることによってメソッドのボリューム化を維持する方法である.これらの演算は、最終演算を実行するまで演算を実行しない特徴(lazy)を有する.
これは、中間演算を順次実行するのではなく、最終演算に統合して最適化するためである.(e.g.ショートトラック、サイクルミックス、...)
さいしゅうえんざん
最終演算とは,中間演算によって演算値を消費する行為である.消費のように、流れは一度しか消費できません.データ・ソースが再利用可能なソース(コレクションなど)の場合、新しいストリームを開くことができますが、I/Oがソースの場合、新しいストリームを作成することはできません.
最終計算は、通常、リスト、Integer、voidなどのストリーム以外の結果を返す.
long count = menu.stream().<중간 연산들>.count(); //개수 반환
menu.stream().<중간 연산들>.forEach(System.out::println); //void 반환
menu.stream().<중간 연산들> .collect(toList()); //리스트 반환
Reference
この問題について(Modern Java in Action #4), 我々は、より多くの情報をここで見つけました https://velog.io/@xodyd15/Modern-Java-in-Action-4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol