Kotlinでコレクションを扱う便利なラムダ式の紹介




ラムダ式とは

処理を一連の流れで書くことができる言語仕様のことを言います。説明よりも実際にどう書くか見ていただきましょう。

下記サンプルは単語のリストに対して3つの処理を一連の流れで書いています。

mapIndexedでwordに対してインデックスの値を文字列連結して、sortedByDescendingで単語を降順に並び替え、最後にtakeでリストの先頭から2つのみ取得しています。

val wordList = listOf("Dog", "Cat", "Pig")

val resultList = wordList
.mapIndexed {
    i, word -> word + i
}
.sortedByDescending{ it }
.take(2)

println(resultList) // ["Pig2", "Dog0"]

ラムダ式を使うとこのように処理を連結でき記述量を短くでき可読性が上がります。

コレクションに対してよく使う関数

mapIndexed

mapIndexedはコレクションをインデックスと要素に分けていてレートしてくれる関数です。処理した内容がそのままコレクションの要素としてリターンされてコレクションを生成します。

map()という関数もあり、これはインデックスがないだけの関数になります。

val wordList = listOf("Dog", "Cat", "Pig")
.mapIndexed {
    i, word -> word + i
}
println(wordList) // ["Dog0", "Cat1", "Pig2"]

sortedBy、sortedByDescending

そーと処理を行う関数で、昇順と降順で関数が分かれています。itは要素のことなので単語自身になります。リストの要素がインスタンスの場合、itでそのインスタンスのプロパティにアクセスすることができるので何を基準にソートするのか簡単に指定できます。

val wordList = listOf("Dog", "Cat", "Pig")
.sortBy { it }
println(wordList) // ["Cat", "Dog", "Pig2"]

take

これはシンプルだけどかなり便利ですね。引数に取得したい数だけ指定すればコレクションの先頭からその数だけ取得することができます。この処理をslice()でやろうとして配列よりも大きい値を指定してエラーになってしまう心配も無くなります。

val wordList = listOf("Dog", "Cat", "Pig")
.take(2)
println(wordList) // ["Dog", "Cat"]

groupBy

これは配列からMapを作るときに便利な関数です。下記ではageが同じ要素をまとめてkeyがage、valueがPersonのMapを生成しています。

val personMap: Map<Int, List<Person>> = listOf(Person(age=10,name="Alice"),Person(age=20,name"Bob"),Person(age=10,name="carol"))
.groupBy { it.age }
println(personMap) // 10: [Person(age=10,name="Alice"),Person(age=10,name="carol")], 20: [Person(age=20,name"Bob")]

まだ4つしか紹介できていないので随時追加していきます!!

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です