ラムダ式とは
処理を一連の流れで書くことができる言語仕様のことを言います。説明よりも実際にどう書くか見ていただきましょう。
下記サンプルは単語のリストに対して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つしか紹介できていないので随時追加していきます!!
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す