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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
57
新しい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
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
130
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
3k
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
350
WebAssembly in Android Apps 〜 WASMはJNIの夢を見るか
keiji
1
110
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
1
150
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
190
新卒PdEのリアル
ryu1013
1
500
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
3
180
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
150
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2k
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
300
What We Talk About When We Talk About XP
m_seki
2
650
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Un-Boring Meetings
codingconduct
0
420
Amusing Abliteration
ianozsvald
1
310
Site-Speed That Sticks
csswizardry
13
1.5k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
430
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
400
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
290
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
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