Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
いつか役にたつかもしれないコレクション周りの5つのこと
Search
RyotaMurohoshi
July 05, 2016
Programming
2
760
いつか役にたつかもしれないコレクション周りの5つのこと
2016//07/05(火)に開催された「Kotlin 勉強会 #1 - 初めての Kotlin」で発表した資料です
http://connpass.com/event/33584/
RyotaMurohoshi
July 05, 2016
Tweet
Share
More Decks by RyotaMurohoshi
See All by RyotaMurohoshi
Tilemapのアップデートについて
ryotamurohoshi
0
43
Unityの合同同人誌や合同商業誌を書いてる僕は感想やレビューや評価が欲しい
ryotamurohoshi
0
550
Unity 2021.1での Unityパッケージの名称変更について
ryotamurohoshi
0
740
Odin Validationはいいぞ!
ryotamurohoshi
2
990
Tilemapはいいぞ!2020 〜すごいぞ、プロジェクト専用拡張Brush〜
ryotamurohoshi
0
2.4k
Unityでも、新しいC#
ryotamurohoshi
0
1.4k
Riderはいいぞ!
ryotamurohoshi
1
3.5k
Riderのススメ〜俺はRiderここが好き〜
ryotamurohoshi
1
2.5k
Unity開発者に伝えたい.NETのこと
ryotamurohoshi
4
38k
Other Decks in Programming
See All in Programming
エンジニアとして高みを目指す、 利益を生み出す設計の考え方 / design-for-profit
minodriven
24
12k
XP, Testing and ninja testing ZOZ5
m_seki
3
550
CSC305 Lecture 05
javiergs
PRO
0
210
Go言語の特性を活かした公式MCP SDKの設計
hond0413
1
210
After go func(): Goroutines Through a Beginner’s Eye
97vaibhav
0
290
高度なUI/UXこそHotwireで作ろう Kaigi on Rails 2025
naofumi
4
3.8k
iOS 17で追加されたSubscriptionStoreView を利用して5分でサブスク実装チャレンジ
natmark
0
660
そのpreloadは必要?見過ごされたpreloadが技術的負債として爆発した日
mugitti9
2
3.2k
「ちょっと古いから」って避けてた技術書、今だからこそ読もう
mottyzzz
10
6.3k
タスクの特性や不確実性に応じた最適な作業スタイルの選択(ペアプロ・モブプロ・ソロプロ)と実践 / Optimal Work Style Selection: Pair, Mob, or Solo Programming.
honyanya
3
160
CSC305 Lecture 02
javiergs
PRO
1
260
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
170
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
36
6.9k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
How STYLIGHT went responsive
nonsquared
100
5.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
9
580
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Faster Mobile Websites
deanohume
310
31k
Visualization
eitanlees
148
16k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
The Invisible Side of Design
smashingmag
301
51k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Transcript
ผʹܶతʹมΘΒͳ͍͚ΕͲ ͍͔ͭʹ͔ͨͭ͠Εͳ͍ ίϨΫγϣϯपΓͷ5ͭͷ͜ͱ @RyotaMurohoshi 2016/07/05(Ր)*͡ΊͯͷKotlin
ͦͷ1 ঢ়گʹԠͯ͡SequenceΛ͏͖ͳ݅
100000ߦͷJSON'LinesϑΝΠϧ ͜ΕΛ1ߦͣͭdataΫϥεͷΦϒδΣΫτʹม͠ ͋Δ݅Λຬͨ͢ΦϒδΣΫτΛ ࠷ॳ͔Β10͚݅ͩ֬ೝද͍ࣔͨ͠
List<T>ͷ߹
val lineList: List<String> = File("data.jsonlines").readLines() val result = lineList .map
{ convertToData(it) } .filter { filterData(it) } .take(10) for (it in result) { println(it) }
࠷ޙ·ͰϑΝΠϧΛಡΜͰ͠·͏
Sequence<T>ͷ߹
val result: List<PersonData> = File("data.jsonlines") .useLines { lineSequences: Sequence<String> ->
lineSequences .map { convertToData(it) } .filter { filterData(it) } .take(10) .toList() } for (it in result) { println(it) }
ϑΝΠϧΛ࠷ޙ·Ͱಡ·ͳ͍
ৄ͘͜͠ͷࢿྉͰʂ h"ps:/ /speakerdeck.com/ryotamurohoshi/sequencefalsehua8kotlin8dot8sequences8dot8sequence
ͦͷ2 ཁૉ͕ۭͷ࣌ͷaverageϝιου͕ 0.0Λฦͯ͠͠·͏݅
averageϝιουͱʁ List<Int>ͱ͔ͷฏۉܭࢉϝιου
͡Ό͋ɺཁૉ͕ۭͷ࣌ʁ
·͔͞ͷ0.0!
ͳͥͩʂʁ
͜Ε͡Όܭࢉ݁Ռ͕0.0ͩͬͨͷ͔ɺ ཁૉ͕ۭ͔ͩΒ0.0ͬͨͷ͔ ۠ผԽ͔ͭͳ͍ʂʂʂ
ͦͦͳͥDouble?ܕʹ͠ͳ͔ͬͨͷ͔ʁ maxminInt?Λฦ͢ͷʹʂ ͘͠ྫ֎Λ͛ͯཉ͍͠
ͦͷ3 Ωʔ͕ॏෳͨ͠ࡍͷassociateܥϝιου͕ɺ ྫ֎Λ͛ͳ͍݅
associateܥͷϝιουͱʁ Listͱ͔͔ΒMapΛͭ͘Δϝιου
data class Person( val id: Long,ɹval name: String, val teamId:
Long) // ॏෳidͷPersonଘࡏ͠ͳ͍ // ಉ͡teamIdΛ࣋ͭPersonଘࡏ͠͏Δ val personList : List<Person>ɹ= loadPersonList() // id͕ॏෳ͠ͳ͍ͷͰແ͠ val personMap : Map<Long, Person> = personList.associateBy { it.id } // ʲʂʂʂʳಉ͡teamIdΛͭཁૉ͕personListʹଘࡏ͠͏Δʂʂʂʂʂ val teamMap : Map<Long, Person> = personList.associateBy { it.teamId }
͠Key͕ॏෳͨ͠Βʁ
ޙউʂ ͋ͱ͕ͪ:ޙΖͷཁૉͰ্ॻ͖
ݸਓతʹྫ֎Λ͛ͯཉ͍͠
ͦͦMapΛͭ͘ͷͰ͋ΕɺKeyҰҙͳͷͳͣ Key͕ॏෳ͢ΔͷΛఆ͢ΔͳΒɺgroupByΛ͏͖
ಥવͷએ
C#ͷLINQޓͷϥΠϒϥϦ KotLinq࡞͍ͬͯ·͢ʂʂʂ h"ps:/ /github.com/RyotaMurohoshi/KotLinq
ࠓճͷTips KotLinqΛ࡞͍ͬͯΔࡍͷݟͰ͢
ͦͷ4 σϑΥϧτΠϯϙʔτ֦ுؔΛ ্ॻ͖Ͱ͖Δ݅
ࣗ࡞ϥΠϒϥϦKotLinqͷʹ takeͬͯϝιου͕͋Γ·͢ʂ
KotLinqͷtakeϝιου fun <TSource> Iterable<TSource>.take(count: Int): Sequence<TSource> = asSequence().take(count)
Μʁ
ඪ४ؔʹtakeͬͯ͋ͬͨΑ͏ͳ? fun <T> Iterable<T>.take(n: Int): List<T>
ඪ४ͰΠϯϙʔτͰ͖Δ֦ுؔ Λ্ॻ͖Ͱ͖Δ݅ʂ
ͦͷ5 ϝιουͷΦʔόʔϩʔυͱit͕ ૬ੑѱ͍݅ (͜Ε͋Μ·ΓίϨΫγϣϯؔͳ͍)
ࣹӨϝιου!ͱ!ΠϯσοΫε͖ࣹӨϝιουೋͭ࡞Γ͍ͨ // ࣹӨϝιου fun <TSource, TResult> Sequence<TSource> .select(selector: (TSource) ->
TResult): Sequence<TResult> // ΠϯσοΫε͖ࣹӨϝιου fun <TSource, TResult> Sequence<TSource> .select(selector: (TSource, Int) -> TResult): Sequence<TResult>
ࣹӨϝιου!ͱ!ΠϯσοΫε͖ࣹӨϝιου ҰҙʹܾΊΒΕͳ͍͔ΒίϯύΠϧΤϥʔ sequenceOf(1, 2, 3).select { it * 2 }
KotLinq(ͰɺΠϯσοΫε͖ࣹӨϝιουΛ ผ໊ʹ͠·ͨ͠ sequence.select { it * it }!ͱ͔͍ͨ͠͠
·ͱΊ • ঢ়گʹԠͯ͡SequenceΛ͏͖ͳ݅ • ཁૉ͕ۭͷ࣌ͷaverageϝιου͕0.0Λฦͯ͠͠·͏݅ • Ωʔ͕ॏෳͨ͠ࡍͷassociateܥϝιου͕ྫ֎Λ͛ͳ͍݅ • σϑΥϧτΠϯϙʔτ֦ுؔΛ্ॻ͖Ͱ͖Δ݅ •
ϝιουͷΦʔόʔϩʔυͱit͕૬ੑѱ͍݅
·ͱΊ KotLinqʹΛ