1
0

More than 1 year has passed since last update.

JavaーStreamAPIー2章

Posted at

前置き

最近は暑くて外出する気にもなりませんね...
田舎者の私は川までドライブして涼んでいます(*´Д`)

今回は前回に引き続き「StreamAPI」についてです。

###「StreamAPIってなに?」

コレクションを扱う時に要素を一つずつ取り出して、何らかの処理を加え、特定の要素だけを取り出したり、配列に変換したり、コレクションを詰め替えたりすることがよくあります。
StreamAPIではこれらの処理をメソッドとラムダ式で記述することでコードをより簡潔にできます。 --黒本解説より引用

「簡単に書けるってことは理解も簡単ってことよね!?」

StreamAPIでは取り出しった要素に加える処理のことを「中間操作」、
中間操作を終えた要素の集合に対して行う最終処理を「終端操作」と呼びます。
これらの操作は、StreamAPIの基本となる機能をまとめたjava.util.stream.Streamインターフェースに定義されており、次のような種類があります。 --黒本解説より引用

【中間操作の種類】

処理を行うメソッド 概要
distinct 要素の重複を除いたストリームを戻す
filter 引数に指定した条件に一致する要素だけで構成されるストリームを戻す
limit ストリームの要素を指定された数に切り詰めた結果のストリームを戻す
map 指定された関数を要素に適用した結果のストリームを戻す
peek 新しい結果のストリームを生成し、指定された関数を適用して戻す
skip 引数で指定した最初のn個の要素を破棄し、残った要素で構成されるストリームを戻す
sorted このストリームの要素を自然順序に従ってソートした結果から構成されるストリームを戻す

【終端操作の種類】

処理を行うメソッド 概要
allMatch ストリーム内のすべての要素が条件に一致するかどうかを調べる
anyMatch ストリーム内のいずれかの要素が条件に一致するかどうかを調べる
collect ストリームの要素を持つコレクションを戻す
count ストリーム内の要素を数える
findAny ストリーム内に要素が残っているかどうかの結果を持つOptionalを戻す
findFirst ストリーム内の最初の要素を持ったOptionalを戻す
forEach ストリーム内の要素を使って繰り返し処理を実行する
max ストリーム内の最大の要素を戻す
min ストリーム内の最小の要素を戻す
noneMatch ストリーム内の要素で条件に一致するものがないかどうか調べる
reduce ストリーム内の要素を累積的に結合していくリダクション処理を実行する
toArray ストリームの要素を含む配列を戻す

「ふむふむ...」

なんかいっぱいあるけど英語から推測して、大体の意味が分かれば問題は解けそう。

「Optionalについても前回で学んだので大体は理解してるぞ!」

前回を見ていない人はOptionalは
「メソッドの処理結果を扱い、処理結果の正常・異常に関わらず、同じ型で扱うことができる」
とだけ覚えればOKです。

使い方

class Main {
	public static void main(String[] args) throws Exception {
		List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
		list.stream()
				.filter(n -> n > 2) 			//2より大きいものを抽出→(3,4,5,6,7,8,9,10)
				.limit(5)						//要素数を5に切り詰める→(3,4,5,6,7)
				.map(n -> "残ったものは" + n)	//文字列を加える
				.forEach(System.out::println); 	//出力

	}
}

「なんだか簡単に書けるじゃん」

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0