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
770
いつか役にたつかもしれないコレクション周りの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
56
Unityの合同同人誌や合同商業誌を書いてる僕は感想やレビューや評価が欲しい
ryotamurohoshi
0
570
Unity 2021.1での Unityパッケージの名称変更について
ryotamurohoshi
0
770
Odin Validationはいいぞ!
ryotamurohoshi
2
1k
Tilemapはいいぞ!2020 〜すごいぞ、プロジェクト専用拡張Brush〜
ryotamurohoshi
0
2.4k
Unityでも、新しいC#
ryotamurohoshi
0
1.4k
Riderはいいぞ!
ryotamurohoshi
1
3.6k
Riderのススメ〜俺はRiderここが好き〜
ryotamurohoshi
1
2.6k
Unity開発者に伝えたい.NETのこと
ryotamurohoshi
4
38k
Other Decks in Programming
See All in Programming
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
1.8k
AIエンジニアリングのご紹介 / Introduction to AI Engineering
rkaga
8
3.4k
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
410
ゲームの物理 剛体編
fadis
0
380
Graviton と Nitro と私
maroon1st
0
140
AIエージェントの設計で注意するべきポイント6選
har1101
5
2.4k
LLMで複雑な検索条件アセットから脱却する!! 生成的検索インタフェースの設計論
po3rin
4
990
JETLS.jl ─ A New Language Server for Julia
abap34
2
460
AI Agent Dojo #4: watsonx Orchestrate ADK体験
oniak3ibm
PRO
0
110
Java 25, Nuevas características
czelabueno
0
120
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
3
1.3k
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
Featured
See All Featured
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
89
Mobile First: as difficult as doing things right
swwweet
225
10k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Utilizing Notion as your number one productivity tool
mfonobong
2
190
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
Being A Developer After 40
akosma
91
590k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
2
68
Google's AI Overviews - The New Search
badams
0
870
Optimizing for Happiness
mojombo
379
70k
KATA
mclloyd
PRO
33
15k
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ʹΛ