こんにちは😀
今回は、ストリーム式の処理をみてみます。
例えば関数mapとfilterを使う場合、戻り値は処理をされたリストとし、filterで処理し、さらにmapで処理するように続けて関数を用います。
このような処理の流れの方式をストリームと言います。
では、ストリーム式も書いてみましょう。
以下の処理の4行目がfilterとmapを組み合わせた関数になります。
filterでlistAの要素の8より下の数字を取り出します。
mapでその要素を文字列「数字」と合わせています。
fun main(args: Array<String>) {
val listA = listOf(1,3,5,7,9,11,13)
val listB = listA.filter{it<8}.map{“数字”+it}
println(“A:”+listA.toString())
println(“B:”+listB.toString())
}
実行すると以下のように、「数字」の文字列と数字が順に出力されます。
さらに以下の文では、上記のストリーム式にforEach関数を足しています。
この関数は、for文を使わずにリストが関数を呼ぶ形で繰り返し処理を行います。
ここでは、リストから取り出した要素が8より下なら文字列「数字」を足し、その要素を1つ1つ出力しています。
fun main(args: Array) {
val listA = listOf(1,3,5,7,9,11,13)
listA.filter{it<8}.map{“数字”+it}.forEach { println(it) }
}
実行します。
繰り返し処理が行われ、条件に一致した要素が順に出力されています。
次は、filterにjoinToString関数を追加して使ってみます。
この関数も、リストの要素を繰り返しセットして出力しています。
定義は1行目で行い、出力は2行目で行なっています。
val listF = listA.filter{(it<8)}.joinToString(” < “) { “$it” }
println(“F:”+listF)
実行すると、該当の要素が順に出力されます。
ストリーム式やforEachなどの繰り返しを行う関数を使うことで、多少複雑な処理も1行で書くことができます。
今回はここまで🤚
では、また次回。