Soumettre la recherche
Mettre en ligne
Collectionを使いこなす
•
2 j'aime
•
3,496 vues
Recruit Lifestyle Co., Ltd.
Suivre
R.kt #2の発表資料です https://recruit-lifestyle.connpass.com/event/71881/
Lire moins
Lire la suite
Ingénierie
Signaler
Partager
Signaler
Partager
1 sur 25
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Livesense tech night immutable-js at a glance
Livesense tech night immutable-js at a glance
Yuta Shimakawa
Real World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみた
blackenedgold
篠崎Lt20141215
篠崎Lt20141215
Toshiki Shinozaki
fanscala1 2 scalaの基本
fanscala1 2 scalaの基本
Toshiki Shinozaki
CoffeeScript
CoffeeScript
Ryo Maruyama
kollectionの紹介
kollectionの紹介
Kota Mizushima
scala.collection 再入門 (改)
scala.collection 再入門 (改)
Ryuichi ITO
Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
Recommandé
Livesense tech night immutable-js at a glance
Livesense tech night immutable-js at a glance
Yuta Shimakawa
Real World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみた
blackenedgold
篠崎Lt20141215
篠崎Lt20141215
Toshiki Shinozaki
fanscala1 2 scalaの基本
fanscala1 2 scalaの基本
Toshiki Shinozaki
CoffeeScript
CoffeeScript
Ryo Maruyama
kollectionの紹介
kollectionの紹介
Kota Mizushima
scala.collection 再入門 (改)
scala.collection 再入門 (改)
Ryuichi ITO
Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
Refactoring point of Kotlin application
Refactoring point of Kotlin application
Recruit Lifestyle Co., Ltd.
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
Ra Zon
Move semantics
Move semantics
mitsutaka_takeda
20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift
necocen
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
Ra Zon
実務者のためのかんたんScalaz
実務者のためのかんたんScalaz
Tomoharu ASAMI
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
Ransui Iso
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料
Toshio Ehara
関数プログラミング ことはじめ (再)
関数プログラミング ことはじめ (再)
Suguru Hamazaki
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
Naoki Aoyama
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
Rpscala2011 0601
Rpscala2011 0601
Hajime Yanagawa
Ll xcode
Ll xcode
Net Kanayan
Haskell超入門 Part.1
Haskell超入門 Part.1
Yuichi Watanabe
Cocoa勉強会201208
Cocoa勉強会201208
Satoshi Oomori
Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門
だいすけ さとう
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Ouka Yuka
関数プログラミングことはじめ
関数プログラミングことはじめ
Naoki Kitora
業務と消費者の体験を同時にデザインするリクルートの価値検証のリアル ー 「Airレジ ハンディ」セルフオーダーのブレない「価値」の確かめ方 ー
業務と消費者の体験を同時にデザインするリクルートの価値検証のリアル ー 「Airレジ ハンディ」セルフオーダーのブレない「価値」の確かめ方 ー
Recruit Lifestyle Co., Ltd.
分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方
Recruit Lifestyle Co., Ltd.
Contenu connexe
Similaire à Collectionを使いこなす
Refactoring point of Kotlin application
Refactoring point of Kotlin application
Recruit Lifestyle Co., Ltd.
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
Ra Zon
Move semantics
Move semantics
mitsutaka_takeda
20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift
necocen
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
Ra Zon
実務者のためのかんたんScalaz
実務者のためのかんたんScalaz
Tomoharu ASAMI
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
Ransui Iso
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料
Toshio Ehara
関数プログラミング ことはじめ (再)
関数プログラミング ことはじめ (再)
Suguru Hamazaki
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
Naoki Aoyama
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
Rpscala2011 0601
Rpscala2011 0601
Hajime Yanagawa
Ll xcode
Ll xcode
Net Kanayan
Haskell超入門 Part.1
Haskell超入門 Part.1
Yuichi Watanabe
Cocoa勉強会201208
Cocoa勉強会201208
Satoshi Oomori
Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門
だいすけ さとう
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Ouka Yuka
関数プログラミングことはじめ
関数プログラミングことはじめ
Naoki Kitora
Similaire à Collectionを使いこなす
(20)
Refactoring point of Kotlin application
Refactoring point of Kotlin application
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
Move semantics
Move semantics
20141128 iOSチーム勉強会 My Sweet Swift
20141128 iOSチーム勉強会 My Sweet Swift
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
実務者のためのかんたんScalaz
実務者のためのかんたんScalaz
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料
関数プログラミング ことはじめ (再)
関数プログラミング ことはじめ (再)
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
Rpscala2011 0601
Rpscala2011 0601
Ll xcode
Ll xcode
Haskell超入門 Part.1
Haskell超入門 Part.1
Cocoa勉強会201208
Cocoa勉強会201208
Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
関数プログラミングことはじめ
関数プログラミングことはじめ
Plus de Recruit Lifestyle Co., Ltd.
業務と消費者の体験を同時にデザインするリクルートの価値検証のリアル ー 「Airレジ ハンディ」セルフオーダーのブレない「価値」の確かめ方 ー
業務と消費者の体験を同時にデザインするリクルートの価値検証のリアル ー 「Airレジ ハンディ」セルフオーダーのブレない「価値」の確かめ方 ー
Recruit Lifestyle Co., Ltd.
分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方
Recruit Lifestyle Co., Ltd.
OOUIを実践してわかった、9つの大切なこと
OOUIを実践してわかった、9つの大切なこと
Recruit Lifestyle Co., Ltd.
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたもの
Recruit Lifestyle Co., Ltd.
CTIサービスを支える裏側 〜物理デバイスとの戦い〜 | iOSDC Japan 2020
CTIサービスを支える裏側 〜物理デバイスとの戦い〜 | iOSDC Japan 2020
Recruit Lifestyle Co., Ltd.
「進化し続けるインフラ」のためのマルチアカウント管理
「進化し続けるインフラ」のためのマルチアカウント管理
Recruit Lifestyle Co., Ltd.
Air事業のデザイン組織とデザイナー
Air事業のデザイン組織とデザイナー
Recruit Lifestyle Co., Ltd.
リクルートライフスタイル AirシリーズでのUXリサーチ
リクルートライフスタイル AirシリーズでのUXリサーチ
Recruit Lifestyle Co., Ltd.
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
Recruit Lifestyle Co., Ltd.
データサイエンティストが力を発揮できるアジャイルデータ活用基盤
データサイエンティストが力を発揮できるアジャイルデータ活用基盤
Recruit Lifestyle Co., Ltd.
Real-time personalized recommendation using embedding
Real-time personalized recommendation using embedding
Recruit Lifestyle Co., Ltd.
データから価値を生み続けるには
データから価値を生み続けるには
Recruit Lifestyle Co., Ltd.
データプロダクト開発を成功に導くには
データプロダクト開発を成功に導くには
Recruit Lifestyle Co., Ltd.
Jupyter だけで機械学習を実サービス展開できる基盤
Jupyter だけで機械学習を実サービス展開できる基盤
Recruit Lifestyle Co., Ltd.
SQLを書くだけでAPIが作れる基盤
SQLを書くだけでAPIが作れる基盤
Recruit Lifestyle Co., Ltd.
BtoBサービスならではの顧客目線の取り入れ方
BtoBサービスならではの顧客目線の取り入れ方
Recruit Lifestyle Co., Ltd.
The Design for Serverless ETL Pipeline データ分析基盤のレガシーなデータロードをサーバレスでフルリプレースするまで道のり
The Design for Serverless ETL Pipeline データ分析基盤のレガシーなデータロードをサーバレスでフルリプレースするまで道のり
Recruit Lifestyle Co., Ltd.
リクルートライフスタイルにおける深層学習の活用とGCPでの実現方法
リクルートライフスタイルにおける深層学習の活用とGCPでの実現方法
Recruit Lifestyle Co., Ltd.
ビックデータ分析基盤の成⻑の軌跡
ビックデータ分析基盤の成⻑の軌跡
Recruit Lifestyle Co., Ltd.
データサイエンティストとエンジニア 両者が幸せになれる機械学習基盤を求めて
データサイエンティストとエンジニア 両者が幸せになれる機械学習基盤を求めて
Recruit Lifestyle Co., Ltd.
Plus de Recruit Lifestyle Co., Ltd.
(20)
業務と消費者の体験を同時にデザインするリクルートの価値検証のリアル ー 「Airレジ ハンディ」セルフオーダーのブレない「価値」の確かめ方 ー
業務と消費者の体験を同時にデザインするリクルートの価値検証のリアル ー 「Airレジ ハンディ」セルフオーダーのブレない「価値」の確かめ方 ー
分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方
OOUIを実践してわかった、9つの大切なこと
OOUIを実践してわかった、9つの大切なこと
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたもの
CTIサービスを支える裏側 〜物理デバイスとの戦い〜 | iOSDC Japan 2020
CTIサービスを支える裏側 〜物理デバイスとの戦い〜 | iOSDC Japan 2020
「進化し続けるインフラ」のためのマルチアカウント管理
「進化し続けるインフラ」のためのマルチアカウント管理
Air事業のデザイン組織とデザイナー
Air事業のデザイン組織とデザイナー
リクルートライフスタイル AirシリーズでのUXリサーチ
リクルートライフスタイル AirシリーズでのUXリサーチ
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
データサイエンティストが力を発揮できるアジャイルデータ活用基盤
データサイエンティストが力を発揮できるアジャイルデータ活用基盤
Real-time personalized recommendation using embedding
Real-time personalized recommendation using embedding
データから価値を生み続けるには
データから価値を生み続けるには
データプロダクト開発を成功に導くには
データプロダクト開発を成功に導くには
Jupyter だけで機械学習を実サービス展開できる基盤
Jupyter だけで機械学習を実サービス展開できる基盤
SQLを書くだけでAPIが作れる基盤
SQLを書くだけでAPIが作れる基盤
BtoBサービスならではの顧客目線の取り入れ方
BtoBサービスならではの顧客目線の取り入れ方
The Design for Serverless ETL Pipeline データ分析基盤のレガシーなデータロードをサーバレスでフルリプレースするまで道のり
The Design for Serverless ETL Pipeline データ分析基盤のレガシーなデータロードをサーバレスでフルリプレースするまで道のり
リクルートライフスタイルにおける深層学習の活用とGCPでの実現方法
リクルートライフスタイルにおける深層学習の活用とGCPでの実現方法
ビックデータ分析基盤の成⻑の軌跡
ビックデータ分析基盤の成⻑の軌跡
データサイエンティストとエンジニア 両者が幸せになれる機械学習基盤を求めて
データサイエンティストとエンジニア 両者が幸せになれる機械学習基盤を求めて
Collectionを使いこなす
1.
Collectionを使いこなす Naoto Nakazato
2.
自己紹介 ● Naoto Nakazato ●
Recruit Lifestyle ● HOT PEPPER Beauty ● アカウント ○ Twitter: @oxsoft ○ Facebook: naoto.nakazato ○ GitHub: oxsoft ○ Qiita: oxsoft
3.
今日お話しすること 「Javaが書ければKotlinも書ける」は真実 でも「Kotlinっぽく」書けている? Collectionを使いこなせるとカッコイイ ※Kotlin初級〜中級者向けです
4.
KotlinにおけるCollection
5.
KotlinにおけるCollection Iterable Collection Set List Map Mutable Iterable Mutable Collection Mutable Set Mutable List Mutable Map
6.
その他のIterableまわりクラス Iterable Sequence IntProgression ClosedRange IntRange
7.
ListとMutableList 実体はどちらもArrayList val list1 =
listOf(1, 2, 3) val list2 = mutableListOf(1, 2, 3) println(list1::class.java.simpleName) // ArrayList println(list2::class.java.simpleName) // ArrayList
8.
ImmutableとRead Only ListはRead OnlyであってImmutableではない (Immutable警察のおかげでだいぶ浸透した話ですが) val
mutableList: MutableList<Int> = mutableListOf(1, 2, 3) val list: List<Int> = mutableList println(list) // [1, 2, 3] mutableList.add(4) println(list) // [1, 2, 3, 4]
9.
ListとMutableListの共変性 List<out E> は共変だが、MutableList<E>
は不変 val intList: List<Int> = listOf(1, 2, 3) val anyList: List<Any> = intList // OK // anyListは読み取り専用なのでStringなどを追加できない val intMutableList: MutableList<Int> = mutableListOf(1, 2, 3) val anyMutableList: MutableList<Any> = intMutableList // Type mismatch! anyMutableList.add("String") // ここのミスマッチを事前に阻止している
10.
生成方法 基本的にはlistOf、setOf、mapOf 取り出し順序やパフォーマンスを気にする場合は適切なクラスを使う setOf(1, 2, 3)
// LinkedHashSet linkedSetOf(1, 2, 3) // LinkedHashSet hashSetOf(1, 2, 3) // HashSet sortedSetOf(1, 2, 3) // TreeSet
11.
使いこなす
12.
条件による要素変更 Javaっぽく val list
= mutableListOf(1, 2, 3) if (condition) list.add(4) return list
13.
条件による要素変更 Javaっぽく Kotlinっぽく ※ただしパフォーマンスを気にする場合はJavaっぽく書いたほうが良い val list =
mutableListOf(1, 2, 3) if (condition) list.add(4) return list val fourth = if (condition) listOf(4) else emptyList() return listOf(1, 2, 3) + fourth
14.
2つのリストを同時に扱う 長さが同じ2つのリストを同時に扱いたい (本当は1つのクラスにまとめる方が良いが、APIなどの制約でできない場合) Javaの場合はlengthの小さい方でfor文を回すなど val nameList =
listOf("Alice", "Bob", "Charlie") val ageList = listOf(20, 25, 30) // [Alice(20), Bob(25), Charlie(30)] が欲しい
15.
2つのリストを同時に扱う zipを使うと簡単にできる(個数は短い方になる) val nameList =
listOf("Alice", "Bob", "Charlie") val ageList = listOf(20, 25, 30) nameList.zip(ageList) { name, age -> "$name($age)" } // [Alice(20), Bob(25), Charlie(30)]
16.
リストを分割する 例:A~Zをリクエストしたいけど、1回にリクエストできるのは10個までなので、3回に 分けてリクエストする val idList =
'A'..'Z' val request = // [[A,B,……,J],[K,L,……,T],[U,V,……,Z]] を得たい
17.
リストを分割する インデックスを付けてグループ分けする val idList =
'A'..'Z' val request = idList .withIndex() .groupBy({ it.index / 10 }, { it.value }) .values A, B, C, … (0, A), (1, B), (2, C), … {0:[A, B, C, …], 1:[K, …], …} [[A, B, …, J], [K, L, …], …]
18.
クエリパラメータをMapに変換する /index.html?key1=value1&key2=value2&key3=value3 を、 {key1=value1, key2=value2,
key3=value3} のMapに変換したい
19.
クエリパラメータをMapに変換する ※↑はアンカーや不正なURLを考慮していないので、 バリデーションなどには使わない下さい val path =
"/index.html?key1=value1&key2=value2&key3=value3" val query = path.substringAfter("?") .split("&") .map { it.split("=") } .associate { it[0] to it[1] } println(query) // {key1=value1, key2=value2, key3=value3}
20.
allとanyとnone all { it
== 0 } 全てがゼロ ならば true any { it == 0 } どれかがゼロ ならば true none { it == 0 } どれもゼロじゃない ならば true
21.
allとanyとnone 否定「!」を使わずに書く方法を考える !list.any { it
!= 0 } list.none { it != 0 } list.all { it == 0 } !list.all { it != 0 } !list.none { it == 0 } list.any { it == 0 } list.all { it != 0 } !list.any { it == 0 } list.none { it == 0 }
22.
allとanyとnone 否定「!」を使わずには書けない場合もある 例:「どれかが 0 じゃなければ
true」 !list.all { it == 0 } list.any { it != 0 } !list.none { it != 0 }
23.
おまけ どんなリストになる? generateSequence(0 to 1)
{ (a, b) -> b to a + b }.map { it.second } 1 1 1 2 2 3 3 5 0 1 ← 2つ目を抜き出す
24.
おまけ フィボナッチ数列になる 実務での使い所が難しいオペレータも結構ある val fib =
generateSequence(0 to 1) { (a, b) -> b to a + b }.map { it.second } println(fib.take(10).toList()) // [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
25.
まとめ var や mutableList
を宣言していろいろやるコードを書く前に考える いろいろなオペレータがあるので調べてみると面白い 「 foreach / if → filter / foreach 」みたいなパターンを覚えると良さそう ご清聴ありがとうございました
Télécharger maintenant