ストリーム(Stream)
05.ストリーム(Stream)
Streamとは?
データの目標を考慮せずに同じ計算を実行
配列、コレクションの演算
一貫した計算によりデータ処理が簡素化
データ処理の抽象化を実施した
作成および使用できないストリーム
データ・ストリームを作成し、演算を実行すると、データ・ストリームが消費されます.
ストリームを再作成して他の演算を実行する必要があります
フロー計算では既存の資料は変更されません
データ・ストリームを作成すると、データ・ストリームで使用されるメモリ領域が個別に作成されるため、演算時に既存のデータは変更されません.
ストリーム演算は中間演算と最終演算に分けられる
複数の中間演算を対流で適用できますが、最終演算は1回のみ適用されます.
最終演算が呼び出された場合にのみ、中間演算が実行され、結果が生成されます.
したがって,中間演算の結果は演算中に未知である.
ちえんえんざん
フローの作成と使用
例
package me.sungbin.chapter6.ch06_04;
import java.util.Arrays;
import java.util.stream.IntStream;
public class IntArrayStreamTest {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
for (int num : arr) {
System.out.println(num);
}
System.out.println();
IntStream is = Arrays.stream(arr);
is.forEach(System.out::println);
int sum = Arrays.stream(arr).sum();
System.out.println(sum);
}
}
中間演算と最終演算
中間演算例-filter()、map()、sorded()など
条件を満たす要素(map)を抽出(フィルタ)または変換する
最終演算の呼び出し時に中間演算を実行し、結果を生成
文字列リストの文字列長が5より大きい要素のみを出力します.
sList.stream().filter(s->s.length() >= 5).forEach(s->System.out.println(s));
filter()は中間演算、forEach()は最終演算 customerList.stream().map(c->c.getName()).forEach(s->System.out.println(s));
map()は中間演算、forEach()は最終演算中間演算と最終演算の実現はランム多式を用いる
最終演算例-forEach()、count()、sum()など.
ストリーム管理のデータが次々と消費され、演算が実行される
最終演算後、ストリームは他の演算を適用できません.
forEach():要素を1つずつ抽出
count():要素の数
sum():要素の和
ArrayListオブジェクトでのフローの作成と使用
package me.sungbin.chapter6.ch06_04;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
public class ArrayListStreamTest {
public static void main(String[] args) {
List<String> sList = new ArrayList<>();
sList.add("Tomas");
sList.add("Edward");
sList.add("Robert");
Stream<String> stream = sList.stream();
stream.forEach(System.out::println);
sList.stream().sorted().forEach(s -> System.out.print(s + "\t"));
System.out.println();
sList.stream().map(String::length).forEach(n -> System.out.print(n + "\t"));
System.out.println();
sList.stream().filter(s -> s.length() > 5).forEach(n -> System.out.print(n + "\t"));
}
}
新しい計算を実行するには、既存のストリームを繰り返し使用するのではなく、stream()メソッドを呼び出してストリームを再作成する必要があります.
整数データの複数の演算例
public class IntArrayStreamTest {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
Arrays.stream(arr).forEach(n->System.out.print(n + "\t"));
System.out.println();
int sum = Arrays.stream(arr).sum();
System.out.println("sum: " + sum);
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
int sum2 = list.stream().mapToInt(n->n.intValue()).sum();
System.out.println(sum2);
}
}
Reference
この問題について(ストリーム(Stream)), 我々は、より多くの情報をここで見つけました https://velog.io/@ysb05222/스트림Streamテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol