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
日本PostgreSQLユーザー会北海道支部(JPUG-Ezo)の紹介 / BEACON#01 JPUG-Ezo
gishi_yama
0
36
Javaユーザーグループ北海道(JavaDo)の紹介 / BEACON#01 JavaDo
gishi_yama
0
40
Beyond Coding: Empowering the Next Generation through Community-Supported Programming Education / CIF26
gishi_yama
0
69
1password で 開発環境の環境変数を安全に管理したい / mild-web-sap #31
gishi_yama
0
62
新しいJavaを学んで・使っていこう! / osd26do
gishi_yama
0
270
Hokkaido JUGのJCP Annual Awards授賞式 / JJUG CCC 2026 Spring LT
gishi_yama
0
110
カンファレンスのCFPを 試しに書いてみよう! / JavaDo32
gishi_yama
0
390
開発環境構築の共通要素:必要なものを手元に持ってきて使えるようにする/JavaDo28
gishi_yama
0
210
ドメイン層×日本語プログラミング/seb_sapporo_04
gishi_yama
1
240
Other Decks in Programming
See All in Programming
パスワード再設定メールのURLについて知っておこう
uyuki234
0
160
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
270
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.5k
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
2
570
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
1k
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.1k
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
1
430
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
380
Domain-Driven Transformation
hschwentner
2
2.3k
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
220
[Dev Group Paris Octobre 26] Agentforce, SIforce, Claudeforce, Slackbot… on s'y retrouve ?
nabondance
0
110
Featured
See All Featured
Chasing Engaging Ingredients in Design
codingconduct
0
360
The Limits of Empathy - UXLibs8
cassininazir
2
720
Rails Girls Zürich Keynote
gr2m
96
14k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
550
Product Roadmaps are Hard
iamctodd
55
13k
30 Presentation Tips
portentint
PRO
1
430
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
The Invisible Side of Design
smashingmag
301
52k
Building the Perfect Custom Keyboard
takai
2
910
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