ストリームAPIとは
データソース(コレクション、配列、I/Oリソース)をもとに、集計操作を行うAPI
★ストリームのパイプライン処理
ストリームAPIは複数の入出力を繋ぐための仕組みを提供しており、処理を行う流れは、データソースをもとに「ストリームオブジェクト」を生成し、後続する処理を連結させることでパイプライン処理を可能とする。
★パイプライン処理の分類
①操作・問い合わせ対象となるデータソース
・コレクション、配列、I/O、リソース...
②中間操作
・ストリーム・パイプラインを形成
③終端操作
・ストリーム・パイプラインを実行して結果を生成
※中間操作(filter()やmap())では、実際の処理結果を返さずに指定した中間操作を保持したストリームが返される。実際にすべての処理が実行されるのは終端操作のメソッドで成される。
1. ストリームの種類と生成
データソースとなり得るクラスにはストリーム生成用のメソッドが提供されている。
1-1. ストリーム生成用の主なメソッド
・java.util.Collection
メソッド名 |
説明 |
例 |
default Stream<E> stream() |
このコレクションをソースとして使用し、逐次的なStreamオブジェクトを返す |
new ArrayList<>().stream() |
・java.util.Arrays
メソッド名 |
説明 |
例 |
static <T> Stream<T> stream(T[] array) |
指定された配列ををソースとして使用し、逐次的なStreamオブジェクトを返す |
Arrays.stream(new Object[]{10, 20, 30}) |
static IntStream stream(int[] array) |
指定されたint型の配列をソースとして使用し、逐次的なIntStreamオブジェクトを返す |
Arrays.stream(new int[]{10, 20, 30}) |
※IntStream...プリミティブ型用(int)ストリームオブジェクト |
|
|
・java.util.stream.Steram
メソッド名 |
説明 |
例 |
static <T> Stream<T> of(T t) |
指定された単一の要素をソースとして使用し、逐次的なStreamを返す |
Stream.stream("abc") |
static <T> Stream<T> of(T... values) |
指定された要素をソースとして使用し、逐次的なStreamオブジェクトを返す |
Stream.stream("Tokyo", "Hakone", "Okinawa") |
static <T> Stream<T> empty() |
空のStreamオブジェクトを返す |
Stream.empty() |
static <T> Stream<T> generate(Supplier<T> s) |
指定されたSupplier(ラムダ式)によって生成される要素に対する順序付けされていないStreamオブジェクトを返す |
Stream.generate(() -> 100) |
static <T> Stream<T> iterate(T seed, UnaryOperator<T> f) |
順序付けされた無限順次Streamを返す(第一引数seedは初期値を指定し、第二引数は無限順次させる抽象値を指定する |
Stream.iterate(1, n -> ++n) |
・java.util.stream.DoubleStream
メソッド名 |
説明 |
例 |
static DoubleStream of(double... values) |
指定された要素をソースとして使用し、逐次的なDoubleStreamオブジェクトを返す |
DoubleStream.of(2.5, 10.0, 6.7) |
・java.util.stream.IntStream
メソッド名 |
説明 |
例 |
static IntStream range(int startInclusive, int endExclusive) |
startInclusive(含む)からendExclusive(含まない)の範囲の値を含む、順序付けされた順次IntStreamを返す |
IntStream.range(1, 11) |
static Intstream rangeClosed(int startInclusive, int endInclusive) |
startInclusive(含む)からendInclusive(含む)の範囲の値を含む、順序付けされた順次IntStreamを返す |
IntStream.ranceClosed(1, 10) |
1-2. ストリームの種類
インターフェース名 |
説明 |
Stream |
順次及び並列の集約操作をサポートする汎用的なストリーム |
IntStream |
順次及び並列の集約操作をサポートするint値のストリーム。但し、intの他、short、byte、char型に使用可能 |
LongStream |
順次及び並列の集約操作をサポートするlong値のストリーム |
DoubleStream |
順次及び並列の集約操作をサポートするdouble値のストリーム。但し、double値の他、float型に使用可能 |