Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
5分で分かるかもしれないjava8 Stream API
Kazuhiro Serizawa
November 26, 2015
Programming
1
2.1k
5分で分かるかもしれないjava8 Stream API
Kazuhiro Serizawa
November 26, 2015
Tweet
Share
More Decks by Kazuhiro Serizawa
See All by Kazuhiro Serizawa
Accelerating Machine Learning I/O by Overlapping Data Staging and Mini-batch Generations
serihiro
1
140
hpc170_slide.pdf
serihiro
0
18
画像解像度別ImageNetの100 iterationの合計処理時間比較
serihiro
0
66
深層ニューラルネットワークにおける訓練高速化のための自動最適化
serihiro
0
19
Introduction to Parallel Computing 2.2
serihiro
0
14
My summer internship result at Treasure Data 2018 #td_intern
serihiro
0
1.8k
startupでもrails使うなら これだけはやっとけ的 tips集
serihiro
19
9.8k
つらくないコードレビューの運用
serihiro
43
20k
Other Decks in Programming
See All in Programming
Makuakeの認証基盤とRe-Architectureチーム
bmf_san
0
590
ちょうぜつ改め21世紀ふつうのソフトウェア設計
tanakahisateru
7
6.4k
WordPress(再)入門 - 基礎知識・環境編
oleindesign
1
130
Writing Greener Java Applications
hollycummins
0
340
AWSとCPUのムフフな関係
cmdemura
0
470
Excelの助けを借りて楽にシナリオを作ろう
rpa_niiyama
0
300
Git Rebase
bkuhlmann
10
1.2k
コンピュータビジョンセミナー2 / computer_vision_seminar_libSGM
fixstars
0
320
Swift Concurrency in GoodNotes
inamiy
4
1.3k
ポケモンで学ぶiOS 16弾丸ツアー 🚅
giginet
PRO
1
610
Functional Data Engineering - A Blueprint for adopting functional principles in data pipeline
vananth22
0
180
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
2
42k
Featured
See All Featured
The Web Native Designer (August 2011)
paulrobertlloyd
76
2.2k
Scaling GitHub
holman
453
140k
Infographics Made Easy
chrislema
235
17k
Designing on Purpose - Digital PM Summit 2013
jponch
108
5.9k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
24
4.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
240
11k
Design by the Numbers
sachag
271
18k
Code Reviewing Like a Champion
maltzj
508
38k
How To Stay Up To Date on Web Technology
chriscoyier
779
250k
Reflections from 52 weeks, 52 projects
jeffersonlam
338
18k
A designer walks into a library…
pauljervisheath
199
16k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
239
19k
Transcript
5Ͱ͔Δ͔͠Εͳ͍ java8 Stream API
java8ʹ͍ͭͯ • 20143݄18ʹOracle͔Βެ։ • “ੈքҰͷ։ൃϓϥοτϑΥʔϜͷըظతͳϦϦʔ ε” ※OracleେຊӦൃද • ϥϜμࣜɺStreamAPIɺDate and
Time APIͳͲͷ ৽ػೳͷಋೖͰjavaքʹֵ໋͕ʂ ʢͱࢥ͚ͬͨͲͦ͜·ͰΓ্͕Βͳ͔ͬͨʣ
ࠓ͔̑͠ͳ͍ͷͰ • Stream APIʹ͍ͭͯ֓ཁΛ͠·͢ • ʮjavaগ͠ϚγʹͳͬͨΑ͏ͩͳʯ ͱ͍͏ͷΛײ͡औͬͯΒ͑Ε͍Ͱ͢
Stream APIͱʁ • ྻɺϦετͳͲͷෳͷσʔλʹ͓͚Δू ૢ࡞ͷαϙʔτΛߦ͏API • ฒߦॲཧΒͷϕϯϦػೳΛఏڙͯ͘͠ΕΔ UtilͰͳ͘Interface͚ͩΛఏڙ͢Δ
Stream APIͱʁ • ཁ͢ΔʹRubyͰݴ͏ͱ͜Ζͷ • Enumerable#each • Enumerable#select • Enumerable#map
• ͜ΕΒͷॲཧΛʮܾ·ͬͨखॱͰ࣮ߦ͢ΔʯAPI • Stream API ≠࣮ɻInterfaceͷΈΛఆ͍ٛͯ͠Δɻ
StreamΛΘͳ͍߹ͷྫ List<Integer> list = Arrays.asList(1,2,3); Integer result = 0; for
(Integer i : list) { result += i * i; } System.out.println(result); //14
ͳ͓ruby result = [1,2,3] .map{ |i| i*i } .inject{ |a,b|
a + b } puts result #=> 14
StreamΛ͏߹ͷྫ List<Integer> list = Arrays.asList(1,2,3); Integer result = list.stream() .map(x
-> x * x) .reduce((a, b) -> a + b) .get(); System.out.println(result); //14
Stream APIΛ༻͍࣮ͨ "SSBZ -JTUͳͲͷ %BUBTPVSDF TUSFBN࡞ தؒૢ࡞ ϑΟϧλϦϯάɾͷૢ࡞ͳͲ ऴૢ࡞ ूૢ࡞ɾผΫϥεͷมɾ
ஞ࣍ॲཧͳͲ ॲཧ͞Εͨ݁Ռ list.stream() .map(x -> x * x) .reduce((a, b) -> a + b) .get();
ඪ४ϥΠϒϥϦ with Stream Stream<String> lines = Files.lines(path) lines.filter(line -> line.startsWith(“a”))
.map(s -> s.toUpperCase) .forEach(s -> System.out.println(s)); // “AMAZON” // “ATOM”
StreamʹΑͬͯԿ͕͏Ε͍͔͠ • σʔλϦιʔεૢ࡞ͷ࣮ͷ؆ུԽ • ϥϜμࣜͱΈ߹ΘͤΔ͜ͱͰ ؔܕͬΆ͍syntaxʹ • σʔλϦιʔεʹର͢Δฒߦॲཧɾࢄॲཧ Λstream()ϝιουʹӅṭԽ࣮ͯ͠Ͱ͖Δ
Collection frameworkͩͱ ϚϧνεϨουͰฒߦॲཧ͢ΔstreamΛ࡞ΕΔ List<Integer> list = Arrays.asList(1,2,3); Integer result =
list.parallelStream() .map(x -> x * x) .reduce((a, b) -> a + b) .get(); System.out.println(result); //14
༨ஊɿ Apache SparkΛͬͨࢄॲཧ࣮ input. flatMap(line -> Arrays.asList(line.split("\\s+"))) .mapToPair(word -> new
Tuple2(word, 1)) .reduceByKey((x, y) -> (Integer) x + (Integer) y) .sortByKey() .collect();
Stream APIͷ·ͱΊ • ීஈྑ͘͏Collection Frameworkͷॲཧ͕ γϯϓϧʹ࣮Ͱ͖ΔΑ͏ʹͳΔ • rubyʹ༏͍͠ • ࢄɾฒߦॲཧΛӅṭԽ࣮ͯ͠Ͱ͖ͦ͏ͳ
ઃܭํΛ͍ࣔͯ͠Δ