Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
60分で体験するStream/Lambdaハンズオン
Search
Hiroto YAMAKAWA
August 28, 2015
Programming
370
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
60分で体験するStream/Lambdaハンズオン
Java Doでしょう #1 (8/23,札幌)
Hiroto YAMAKAWA
August 28, 2015
More Decks by Hiroto YAMAKAWA
See All by Hiroto YAMAKAWA
Beyond Coding: Empowering the Next Generation through Community-Supported Programming Education / CIF26
gishi_yama
0
62
1password で 開発環境の環境変数を安全に管理したい / mild-web-sap #31
gishi_yama
0
56
新しいJavaを学んで・使っていこう! / osd26do
gishi_yama
0
260
Hokkaido JUGのJCP Annual Awards授賞式 / JJUG CCC 2026 Spring LT
gishi_yama
0
110
カンファレンスのCFPを 試しに書いてみよう! / JavaDo32
gishi_yama
0
370
開発環境構築の共通要素:必要なものを手元に持ってきて使えるようにする/JavaDo28
gishi_yama
0
210
ドメイン層×日本語プログラミング/seb_sapporo_04
gishi_yama
1
240
Javaへの新たなHello, World / yuruchitose-04
gishi_yama
0
120
JSR381、知っていますか?Javaの画像認識APIのはなし / SC4Y23-05
gishi_yama
0
360
Other Decks in Programming
See All in Programming
スマート反転とウェブアクセシビリティ
camiha
0
210
How I Stole PSI from Android Studio - DroidKaigi2026
worker8
0
130
iOSDC2026登壇資料.pdf
riofujimon
0
160
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
230
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
110
Jetpack Compose メカニズム
skydoves
0
420
cdk deploy JawsSonic #MARATHONしながらAWSリソースをデプロイしてみよう
akihisaikeda
2
130
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
120
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
120
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
2.2k
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
320
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
200
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Marketing to machines
jonoalderson
1
5.8k
ラッコキーワード サービス紹介資料
rakko
1
4.9M
Code Reviewing Like a Champion
maltzj
528
40k
The Cost Of JavaScript in 2023
addyosmani
55
10k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Technical Leadership for Architectural Decision Making
baasie
3
570
How to Ace a Technical Interview
jacobian
281
24k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
230
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Agile that works and the tools we love
rasmusluckow
331
22k
Transcript
Ͱମݧ͢Δ 4USFBN-BNCEB ϋϯζΦϯ !HJTIJ@ZBNB +BWB%Pד׃׳ֲ劦䌽
HJTIJ@ZBNB w ํେֶͰFϥʔχϯάͳͲͷใγεςϜͷ ։ൃɾݚڀʹैࣄ w 8JDLFU4BQQPSP +BWB%Pˡ/FX w 8JDLFU6TFS(VJEFͷ༁ʹνϟϨϯδத IUUQTHJUIVCDPNXJDLFUTBQQPSPXJDLFU@VTFS@HVJEF@KQ
ϋϯζΦϯͷ֓ཁ +BWBͷϦϦʔε͔Β͋·Γ͕ܦա͠ɺ4USFBN "1*-BNCEB͕ࣜ։ൃڥʹಋೖ͞ΕΔࣄྫ࣍ୈ ʹ૿͖͍͑ͯͯΔ͜ͱͱࢥ͍·͢ɻ 4USFBN"1*-BNEBࣜͷ͘͠Έɾॻ͖ํɾϧʔϧͷ جຊͱɺ͜ΕΒΛ༻͍ͯطଘͷ+BWBίʔυΛͲ͏ม Խͤ͞Δ͜ͱ͕Ͱ͖Δͷ͔ɺମݧͯ͠Έ·͠ΐ͏ɻ
࿅शɾԋशϓϩδΣΫτ https://github.com/java-‐do/20150823_seminar b%PXOMPBE;JQ`Λͯ͠ల։ʢ͘͠HJUͰDMPOFʣ TUSFBNϑΥϧμΛΠϯϙʔτ &DMJQTFɿ&YJTUJOH.BWFO1SPKFDUʢطଘͷ.BWFOϓϩδΣΫτʣ /FU#FBOTɿϓϩδΣΫτΛ։͘ ࢦࣔʹैͬͯ)BOET0OKBWBΛฤू͠ɺϑΝΠϧΛ࣮ߦ͢Δ ղྫ"OTXFSKBWBʹهࡌ͞Ε͍ͯΔ
4USFBN-BNCEB +BWBʹࡉ͔͍ฒྻॲཧΛಋೖ͢ΔͨΊɺ+BWB͔Βಋ ೖ͞Εͨ"1*ه๏ͷ͜ͱ w 4USFBNɿ ྻɺ-JTUɺ4FUɺ.BQͱ͍ͬͨίϨΫγϣϯతͳ ΦϒδΣΫτͷॱ࣍ɾฒྻॲཧΛهड़͢Δ"1* w -BNCEBɿ ಗ໊ͷؔΦϒδΣΫτΛ࡞ΔͨΊͷؔܕΠϯ
λʔϑΣʔεͷ࣮ʢͱͦͷه๏ʣ
BHFT ͨͱ͑ɺྻΛදࣔ͢Δ ‣ BHFTΛཁૉ܁Γฦ͢ ‣
JΛཁૉ൪߸ͱͯ͠ɺBHFT͔ΒཁૉΛऔΓग़͢ ‣ औΓग़ͨ͠ཁૉΛදࣔ͢Δ int[] ages = new int[]{22, 10, 19, 38}; for (int i = 0; i < ages.length; i++) { System.out.println(ages[i]); }
BHFT ͨͱ͑ɺྻΛදࣔ͢Δ 4USFBN int[] ages
= new int[]{22, 10, 19, 38}; Arrays.stream(ages) .forEach(n -‐> System.out.println(n)); ‣ BHFTΛTUSFBNʹ͢Δ ‣ TUSFBNͷཁૉOΛ4ZTUFNPVUQSJOUMO O Ͱදࣔ͢Δ
Ⳣ椚ְׇֿׁהָ ״僇然ח٥知稆ח剅ֽ ‣ BHFTΛཁૉ܁Γฦ͢ ‣ JΛཁૉ൪߸ͱͯ͠ɺBHFT͔ΒཁૉΛऔΓग़͢ ‣ औΓग़ͨ͠ཁૉΛදࣔ͢Δ ‣
BHFTΛTUSFBNʹ͢Δ ‣ TUSFBNͷཁૉOΛ4ZTUFNPVUQSJOUMO O Ͱදࣔ͢Δ
BHFT ͨͱ͑ɺબΜͰදࣔ͢Δ ‣ BHFTΛཁૉ܁Γฦ͢ ‣ JΛཁૉ൪߸ͱͯ͠ɺBHFT͔ΒཁૉOΛऔΓग़͢
‣ O͕Ҏ্ͷ͚࣌ͩɺԼΛ࣮ߦ͢Δ ‣ OΛදࣔ͢Δ ˞Ҏ্Λදࣔ int[] ages = new int[]{22, 10, 19, 38}; for (int i = 0; i < ages.length; i++) { int n = ages[i]; if (n >= 20) { System.out.println(n); } }
BHFT ͨͱ͑ɺબΜͰදࣔ͢Δ 4USFBN ‣ BSHTΛ4USFBNʹ͢Δ
‣ TUSFBNͷཁૉO͕Ҏ্ͷͷ͚ͩʹϑΟϧλ͢Δ ‣ ͬͨཁૉOΛදࣔ͢Δ ˞Ҏ্Λදࣔ int[] ages = new int[]{22, 10, 19, 38}; Arrays.stream(ages) .filter(n -‐> n >= 20) // 22, 38ͷΈͷStream͕Ͱ͖Δ .forEach(n -‐> System.out.println(n));
Ⳣ椚ְׇֿׁהָ ״僇然ח٥知稆ח剅ֽ 㣐✲ז✲זךד䏝 ‣ BHFTΛཁૉ܁Γฦ͢ ‣ JΛཁૉ൪߸ͱͯ͠ɺBHFT͔ΒཁૉOΛऔΓग़͢ ‣ O͕Ҏ্ͷ͚࣌ͩɺԼΛ࣮ߦ͢Δ
‣ OΛදࣔ͢Δ ‣ BSHTΛ4USFBNʹ͢Δ ‣ TUSFBNͷཁૉO͕Ҏ্ͷͷ͚ͩʹϑΟϧλ͢Δ ‣ ͬͨཁૉOΛදࣔ͢Δ
࿅शΛ ͬͯΈ·͠ΐ͏
4USFBNͷߏ int[] ages = new int[]{22, 10, 19, 38};
Arrays.stream(ages) .filter(n -‐> n >= 20) .forEach(n -‐> System.out.println(n)); ˘4USFBNך欰䧭 ˘⚥乼⡲ ˘穄畭乼⡲ ‣ ऴૢ࡞͕࣮ߦ͞ΕΔͱ͖ʹɺύΠϓϥΠϯͷશ͕࣮ͯߦ͞ΕΔ ‣ ͦΕͧΕʹͲͷΑ͏ͳछྨ͕͋Δͷ͔ !IJTJEBNB͞Μͷ IUUQXXXOFKQBTBIJIJTIJEBNBIPNFUFDIKBWB TUSFBNIUNMI@NFUIPE͕Θ͔Γ͍͢ ετϦʔϜɾύΠϓϥΠϯ
BHFT ฒྻॲཧ 4USFBN ˞Ҏ্Λදࣔ int[]
ages = new int[]{22, 10, 19, 38}; Arrays.stream(ages) .parallel() .filter(n -‐> n >= 20) .forEach(n -‐> System.out.println(n)); TUSFBNΛQBSBMMFMTUSFBNʹมԽͤ͞Δ͚ͩͰɺ ฒྻॲཧʹͳΔ ˞ॱংอূͩͱύϑΥʔϚϯεԼ͕Δ
BHFT ཁૉͷೖΕସ͑ 4USFBN NBQɺNBQ5P99ͱ͍͏ϝιουͰɺཁૉΛೖΕସ͑ͨ 4USFBNΛੜ͠ɺॲཧΛܧଓ͢Δ
Arrays.stream(ages) .filter(n -‐> n >= 20) // 22, 38ͷΈͷStream͕Ͱ͖Δ .mapToObj(n -‐> Integer.toBinaryString(n)) // 2ਐԽͨ͠Stream͕Ͱ͖Δ .forEach(n -‐> System.out.println(n));
-BNCEBࣜ ɾn -‐> n >= 20 ɾn -‐>
Integer.toBinaryString(n) ɾn -‐> System.out.println(n) 4USFBNͷதʹݱΕͨ ͜ΕΒ͕-BNCEBʢϥϜμʣࣜɻ ϥϜμࣜɺzࣜzͷ༷ʹॲཧʢؔʣΛॻ͚Δ ʮؔΦϒδΣΫτʯ +BWBͰɺؔܕΠϯλʔϑΣʔεͷແ໊Ϋϥε͕ݪܕ
ແ໊Ϋϥε ΠϯελϯεԽͷࡍʹ\^Λ͚ͭΔ͜ͱͰɺαϒΫϥεΠϯλʔ ϑΣʔεͷ࣮ΫϥεͷΦϒδΣΫτΛͦͷͰ࡞Δ͜ͱ͕Ͱ͖Δɻ ͜ͷαϒΫϥεʹɺΫϥε໊͕ͳ͍ɻ ͜ͷख๏ʢͱɺ࡞ΒΕͨΫϥεʣΛແ໊Ϋϥεͱ͍͏ɻ public class GamePlayer extends AbstractPlayer
{ // AbstractPlayerͷαϒΫϥε // ͜ͷαϒΫϥεʹ(BNF1MBZFSͱ͍͏Ϋϥε໊લ͕͋Δ } AbstractPlayer player = new AbstractPlayer() { // ͜ͷΦϒδΣΫτɺAbstractPlayerͷαϒΫϥεͷΦϒδΣΫτͱͳΔ // αϒΫϥεʹΫϥε໊͕ଘࡏ͠ͳ͍ͷͰɺແ໊ΫϥεͱݺΕΔ }; ˣ௨ৗͷαϒΫϥε ˢແ໊Ϋϥε
ؔܕΠϯλʔϑΣʔε 4USFBNװ؎كٝزⳢ椚זוד遤Ⳣ椚ꟼ侧㹀 纏דֹ؎ٝة٦ؿؑ٦أ 4VQQMJFS⦼ך欰䧭䒷侧ז׃ 鵤⦼֮ 1SFEJDBUF勴⟝ⴻ㹀䒷侧א 鵤⦼כCPPMFBO 'VODUJPO⦼ך㢌䳔䒷侧א 鵤⦼֮ $POTVNFS⦼ךⳢ椚䒷侧א
鵤⦼ז׃ 3VOOBCMFⳢ椚㹋遤䒷侧ז׃ 鵤⦼ז׃ זוך垥彊ꟼ侧㘗؎ٝة٦ؿؑ٦أָ֮ KBWBVUJMGVODUJPO
int[] ages = new int[]{22, 10, 19, 38}; IntConsumer
consumer = new IntConsumer() { // $POTVNFSͷແ໊Ϋϥε @Override public void accept(int n) { System.out.println(n); } }; Arrays.stream(ages) .forEach(consumer);ɹ ྫɿྻΛදࣔ͢Δऴૢ࡞ͷ $POTVNFSͷແ໊Ϋϥε
int[] ages = new int[]{22, 10, 19, 38}; IntConsumer
consumer = new IntConsumer() { // $POTVNFSͷແ໊Ϋϥε @Override public void accept(int n) { System.out.println(n); } }; Arrays.stream(ages) .forEach(consumer);ɹ ແ໊Ϋϥε͔ΒϥϜμࣜ
int[] ages = new int[]{22, 10, 19, 38}; IntConsumer
consumer = n -‐> System.out.println(n); Arrays.stream(ages) .forEach(consumer);ɹ ϥϜμࣜ
int[] ages = new int[]{22, 10, 19, 38}; IntConsumer
consumer = n -‐> System.out.println(n); Arrays.stream(ages) .forEach(n -‐> System.out.println(n));ɹ Ҿʹ͢
Ξϩʔԋࢉࢠͷࠨล͕ෳߦ ʹͳΔͱ͖\^ͰғΉ int[] ages = new int[]{22, 10, 19, 38};
Arrays.stream(ages) .forEach(n -‐> { String s = n + "ࡀ"; System.out.println(s); });
࿅श ԋशʙΛ ͬͯΈ·͠ΐ͏
List<String> choiced = profiles.stream() .filter(p -‐> p.isFamale())
.filter(p -‐> p.isAdult()) .map(p -‐> p.getName()) .forEach(i -‐> System.out.println(i)); List<String> choiced = profiles.stream() .filter(Profile::isFamale) .filter(Profile::isAdult) .map(Profile::getName) .forEach(System.out::println); ϝιουࢀর ϥϜμࣜͷ෦Λ ΦϒδΣΫτϝιου໊ Ϋϥεϝιου໊ ʹॻ͖͑ΒΕΔʢҾਪଌ͞ΕΔʣ
෭࡞༻ʢۃྗʣආ͚Δ StringJoiner joiner = new StringJoiner(",", "Profile{", "}"); Stream.of(name,
sex.toString(), age.toString(), state, policy) .forEach(joiner::add); StringJoiner joiner = new StringJoiner(",", "Profile{", "}"); Stream.of(name, sex.toString(), age.toString(), state, policy) .parallel() .forEach(joiner::add); KPJOFSʹมԽʢ෭࡞༻ʣΛ༩͑Δ4USFBN ্ʢॱ࣍ॲཧʣͱԼʢฒྻॲཧʣͰ݁Ռ͕ҟͳΔʂ ΉΛ͑ͳ͍߹͋Δ͕ɺ෭࡞༻ͷ͋Δॲཧۃྗ͚͞Δ͜ͱͰɺ ΤϥʔͷࢭฒྻԽΛ͘͢͠ͳΔ ˞ͳ͓ɺϥϜμࣜͷ໊Ͱݺͼग़͞ΕΔม҉తʹpOBMͱͳΔ ɹʢ্ͷྫͰɺKPJOFS͕pOBMͱͯ͠ѻΘΕΔʣ
·ͱΊ
·ͱΊ Stream: ίϨΫγϣϯతͳΦϒδΣΫτͷॱ࣍ɾฒྻ ॲཧΛύΠϓϥΠϯͰهड़Ͱ͖Δ Lambda: ؔܕΠϯλʔϑΣʔεͷ࣮ʢStreamͰ ॲཧ͍ͤͨ͞༰ͳͲʣΛࣜϝιουࢀরͰॻ͚Δ Stream
API / LambdaΛ͏͜ͱͰɺforจΛ͏ॲཧ ΛΑΓ໌֬ʹɾ؆ૉʹॻ͚Δ streamΛparallelԽ͢Δ͚ͩͰฒྻॲཧΛߦΘͤΔ͜ͱ ͕Ͱ͖ΔΑ͏ʹͳΔʢ෭࡞༻ͷ༗ແʹҙʣ
8JDLFUকདྷతʹʜ .BSUJKO%BTIPSTU "QBDIF8JDLFUZFBSTCFZPOE
ࢀߟจݙ ɾ+BWBʹΑΔؔܕϓϩάϥϛϯάʢ*4#/ʣ ɾ+BWBϓϩάϥϚʔͳΒशಘ͓͖͍ͯͨ͠+BWB4&࣮ફϓϩάϥϛϯά ʢ*4#/ʣ
ࢀߟจݙ ɾ͖ͭͶ͞ΜͱֶͿ-BNCEBࣜ4USFBN"1*ϋϯζΦϯ IUUQXXXTMJEFTIBSFOFUCJUUFS@GPYIBOETPO IUUQTCJUCVDLFUPSHCJUUFS@GPYMBNCEBHJU ɾͻͩ͠·ͷϗʔϜϖʔδɿ+BWB4USFBN IUUQXXXOFKQBTBIJIJTIJEBNBIPNFUFDIKBWBTUSFBNIUNM ɾ+BWBͷTUSFBNΛ͍͜ͳ͢ɿ͖ͩ͠ͷͯͳ IUUQEIBUFOBOFKQOPXPLBZ ɾ+BWBͷ4USFBNͰֶͿԆॲཧ࣮ύλʔϯ IUUQXXXTMJEFTIBSFOFUNJLFOFDLKBWBTUSFBN
ɾࣾ+BWBษڧձϥϜμࣜͱετϦʔϜ"1* IUUQXXXTMJEFTIBSFOFU[PFUSPQFKBWBMBNCEBBOETUSFBN ɾ"QBDIF8JDLFUZFBSTCFZPOE IUUQXXXTMJEFTIBSFOFUEBTIPSTUXJDLFUZFBSTBOECFZPOE