kdnakt blog

hello there.

会社でKotlin勉強会(第13回)を開催した

今週は第13回を開催しました。

 

前回の様子はコチラ↓

kdnakt.hatenablog.com

 

 

[第13回の様子]

2020/05/13に第13回を開催した。

 

参加メンバーは自分を含めて6人。引き続き、みんな在宅勤務中なので、それぞれオンラインミーティングルームに参加する形式で実施した。今回も家族の乱入があり、ちょっと和んだ。

直前まで仕事がばたばたしていたのと、セットアップが面倒だったので、VRでの参加は実施せず。

 

内容としては、Learn Kotlin by Exampleの第5章 CollectionsのcountassocitateBy, groupBypartitionの3節を進めた。

 

今週も途中までLearn Kotlin by Exampleのサイト上でコードが実行できていたのだが、最後のpartitionの動作確認をしようとしたところで動かなくなってしまった。残念。

 

[学んだことや疑問点]

  • count
    • そのまま実行するとlistの件数を返す
    • 関数を渡してフィルタリングした結果の件数を返すこともできる
    • 久しぶり(3週間ぶり)のKotlinだったので、println("$hoge")で変数hogeを出力できるKotlin便利だなーと思った
  • associateBy, groupBy
    • associateBygroupBylistを変換してmapを作る関数
    • どちらも第一引数がキーセレクタで、省略可能な第二引数がバリューセレクタとなっている
    • バリューセレクタが省略された場合は元のオブジェクトがそのまま利用される
    • おなじキーが存在した場合にassociateByはバリューを上書きする
    • groupByはバリューがlistなので、おなじキーが存在した場合に複数件のデータがバリューに存在する
data class Person(val name: String, val city: String)

val people = listOf(
    Person("John", "Boston"),
    Person("Taro", "Tokyo"),
    Person("Jiro", "Tokyo"))

val groupBy = people.groupBy(Person::city, Person::name)
println("$groupBy") // {Boston=[John], Tokyo=[Taro, Jiro]}

val associateBy = people.associateBy(Person::city, Person::name)
println("$associateBy") // {Boston=John, Tokyo=Jiro}
  • partition
    • 関数を渡すと、条件に合致するlistと合致しないlistのPairを返してくれる
    • Pairprintln("${pair.first}, ${pair.second}"のようにしてアクセスできる
    • JavaScriptの分割代入っぽい感じで、val (positives, negatives) = numbers.partition {it > 0}のように結果を得ることも可能

 

[まとめ]

今回も、最後に「やったー!」を実施した。ゴールデンウィークであいだが空いたので、3週間ぶり。やったー!

次回もCollectionの続きをやるぞ!