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
60分で体験するStream/Lambdaハンズオン
Search
Hiroto YAMAKAWA
August 28, 2015
Programming
360
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
新しいJavaを学んで・使っていこう! / osd26do
gishi_yama
0
180
Hokkaido JUGのJCP Annual Awards授賞式 / JJUG CCC 2026 Spring LT
gishi_yama
0
74
カンファレンスのCFPを 試しに書いてみよう! / JavaDo32
gishi_yama
0
210
開発環境構築の共通要素:必要なものを手元に持ってきて使えるようにする/JavaDo28
gishi_yama
0
190
ドメイン層×日本語プログラミング/seb_sapporo_04
gishi_yama
1
220
Javaへの新たなHello, World / yuruchitose-04
gishi_yama
0
120
JSR381、知っていますか?Javaの画像認識APIのはなし / SC4Y23-05
gishi_yama
0
340
jPeekでのクラスの凝集度計測の試行 / mild-web-sapporo#24
gishi_yama
0
500
Github CopilotとChatGPTを使って感じた使い分けの糸口 / JavaDo #22
gishi_yama
1
1.8k
Other Decks in Programming
See All in Programming
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
520
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
200
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
140
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
8
4.3k
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
150
yield再入門 #phpcon
o0h
PRO
0
380
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
180
OSINT for SRE: 学術論文とポストモーテムから探る システム障害の共通パターン / SRE NEXT 2026
tomoyk
1
3.7k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
230
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.5k
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
330
Claude Team Plan導入・ガイド
tk3fftk
0
200
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Designing Powerful Visuals for Engaging Learning
tmiket
1
450
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
970
Exploring anti-patterns in Rails
aemeredith
3
440
Making the Leap to Tech Lead
cromwellryan
135
10k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
830
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
How GitHub (no longer) Works
holman
316
150k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.4k
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