Slide 1

Slide 1 text

5෼Ͱ෼͔Δ͔΋͠Εͳ͍ java8 Stream API

Slide 2

Slide 2 text

java8ʹ͍ͭͯ • 2014೥3݄18೔ʹOracle͔Βެ։ • “ੈքҰͷ։ൃϓϥοτϑΥʔϜͷըظతͳϦϦʔ ε” ※OracleେຊӦൃද • ϥϜμࣜɺStreamAPIɺDate and Time APIͳͲͷ ৽ػೳͷಋೖͰjavaքʹֵ໋͕ʂ
 ʢͱࢥ͚ͬͨͲͦ͜·Ͱ੝Γ্͕Βͳ͔ͬͨʣ

Slide 3

Slide 3 text

ࠓ೔͸̑෼͔͠ͳ͍ͷͰ • Stream APIʹ͍ͭͯ֓ཁΛ࿩͠·͢ • ʮjava΋গ͠͸ϚγʹͳͬͨΑ͏ͩͳʯ
 ͱ͍͏ͷΛײ͡औͬͯ΋Β͑Ε͹޾͍Ͱ͢

Slide 4

Slide 4 text

Stream APIͱ͸ʁ • ഑ྻɺϦετͳͲͷෳ਺ͷσʔλʹ͓͚Δू ໿ૢ࡞ͷαϙʔτΛߦ͏API • ฒߦॲཧ΍ΒͷϕϯϦػೳΛఏڙͯ͘͠ΕΔ UtilͰ͸ͳ͘Interface͚ͩΛఏڙ͢Δ

Slide 5

Slide 5 text

Stream APIͱ͸ʁ • ཁ͢ΔʹRubyͰݴ͏ͱ͜Ζͷ • Enumerable#each • Enumerable#select • Enumerable#map • ͜ΕΒͷॲཧΛʮܾ·ͬͨखॱͰ࣮ߦ͢ΔʯAPI • Stream API ≠࣮૷ɻInterfaceͷΈΛఆ͍ٛͯ͠Δɻ

Slide 6

Slide 6 text

StreamΛ࢖Θͳ͍৔߹ͷྫ List list = Arrays.asList(1,2,3);
 Integer result = 0;
 for (Integer i : list) {
 result += i * i;
 }
 System.out.println(result); //14

Slide 7

Slide 7 text

ͳ͓ruby result = [1,2,3]
 .map{ |i| i*i }
 .inject{ |a,b| a + b }
 puts result #=> 14

Slide 8

Slide 8 text

StreamΛ࢖͏৔߹ͷྫ List 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

Slide 9

Slide 9 text

Stream APIΛ༻͍࣮ͨ૷ "SSBZ -JTUͳͲͷ
 %BUBTPVSDF TUSFBN࡞੒ தؒૢ࡞
 ϑΟϧλϦϯάɾ஋ͷૢ࡞ͳͲ ऴ୺ૢ࡞
 ू໿ૢ࡞ɾผΫϥε΁ͷม׵ɾ
 ஞ࣍ॲཧͳͲ ॲཧ͞Εͨ݁Ռ list.stream()
 
 
 .map(x -> x * x)
 
 .reduce((a, b) -> a + b) .get();

Slide 10

Slide 10 text

ඪ४ϥΠϒϥϦ with Stream Stream lines = Files.lines(path)
 lines.filter(line -> line.startsWith(“a”))
 .map(s -> s.toUpperCase)
 .forEach(s -> System.out.println(s));
 // “AMAZON”
 // “ATOM”

Slide 11

Slide 11 text

StreamʹΑͬͯԿ͕͏Ε͍͔͠ • σʔλϦιʔεૢ࡞ͷ࣮૷ͷ؆ུԽ • ϥϜμࣜͱ૊Έ߹ΘͤΔ͜ͱͰ
 ؔ਺ܕͬΆ͍syntaxʹ • σʔλϦιʔεʹର͢Δฒߦॲཧɾ෼ࢄॲཧ Λstream()ϝιουʹӅṭԽ࣮ͯ͠૷Ͱ͖Δ

Slide 12

Slide 12 text

Collection frameworkͩͱ
 ϚϧνεϨουͰฒߦॲཧ͢ΔstreamΛ࡞ΕΔ List 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

Slide 13

Slide 13 text

༨ஊɿ
 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();

Slide 14

Slide 14 text

Stream APIͷ·ͱΊ • ීஈྑ͘࢖͏Collection Frameworkͷॲཧ͕ γϯϓϧʹ࣮૷Ͱ͖ΔΑ͏ʹͳΔ • ruby೴ʹ΋༏͍͠ • ෼ࢄɾฒߦॲཧΛӅṭԽ࣮ͯ͠૷Ͱ͖ͦ͏ͳ ઃܭํ਑Λ͍ࣔͯ͠Δ