Slide 1

Slide 1 text

ࠓͦ͜ɺϥϜμࣜΛߟ͑Δ ᓎఉ༞Ұ Java in the Box ͳͥ͋ͳͨ͸ϥϜμࣜΛۤखͱײ͡Δͷ͔

Slide 2

Slide 2 text

ϥϜμࣜಋೖ Java 8ϦϦʔε 2014: ؔ਺ܕϓϩάϥϛϯάػೳͷ୺ॹ

Slide 3

Slide 3 text

ϥϜμࣜಋೖ Java 8ϦϦʔε 2014: ؔ਺ܕϓϩάϥϛϯάػೳͷ୺ॹ Records Sealed Class Pattern Matching ݴޠ࢓༷ ୅਺తσʔλܕ ^ ඪ४ϥΠϒϥϦ Stream API CompletableFuture Flow (Reactive Stream) HTTP Client ϑϨʔϜϫʔΫ Spring WebFlux Oracle Helidon Red Hat Quarkus et al.

Slide 4

Slide 4 text

ϥϜμࣜಋೖ Java 8ϦϦʔε 2014: ؔ਺ܕϓϩάϥϛϯάػೳͷ୺ॹ Records Sealed Class Pattern Matching ݴޠ࢓༷ ୅਺తσʔλܕ ^ ඪ४ϥΠϒϥϦ Stream API CompletableFuture Flow (Reactive Stream) HTTP Client ϑϨʔϜϫʔΫ Spring WebFlux Oracle Helidon Red Hat Quarkus et al. ΋ؔ਺ܕϓϩάϥϛϯά͔ΒಀΕΒΕͳ͍ Java खଓ͖ܕ͔Βએݴܕ΁ จ͔Βࣜ΁ ϥϜμࣜಋೖ͔Β೥ ͋ΒͨΊͯϥϜμࣜΛݟ௚ͯ͠ΈΔ ϥϜμࣜΛ࢖͏ ϥϜμࣜͷಈ࡞Λཧղ͢Δ

Slide 5

Slide 5 text

ϥϜμࣜ ແ໊ ؔ਺ ࢖͏্Ͱ͸

Slide 6

Slide 6 text

ϥϜμࣜ ແ໊ ؔ਺ ࢖͏্Ͱ͸ ϝιου͕ॻ͚ΔϥϜμࣜ΋ॻ͚Δ JLS 15.27 A lambda expression is like a method ॻ͖ํͷ໰୊Ͱ͸ͳ͘ɺߟ͑ํͷ໰୊ खଓ͖తهड़ͷढറ ͍ʹ͑͠ͷ Java ͷهड़ελΠϧ΁ͷݻࣥ

Slide 7

Slide 7 text

มԽʹ͸ඞͣίετ͕൐͍·͢ Brian Goetz Project Lambdaͷల๬ Java Magazine Oct. 2012

Slide 8

Slide 8 text

खଓ͖తهड़ͷ໰୊఺ ෳ਺ͷॲཧΛҰॹʹ͔͚ͯ͠·͏ ϛϡʔλϒϧม਺ͷଟ༻ ม਺ͷείʔϓ͕޿͘ͳΓ͕ͪ

Slide 9

Slide 9 text

record StudentScore(String name, String className, int score) {} List scores = ...; ྫ"૊ͷੜెͷฏۉࢉग़ record StudentScore(String name, String className, int score) {} List scores = ...; double sum = 0.0; int count = 0; for (int i = 0; i < scores.size(); i++) { var ss = scores.get(i); if (ss.className().equals("A")) { sum += ss.score(); count++; } } sum /= count; தؒঢ়ଶอ࣋ͷͨΊϛϡʔλϒϧ είʔϓ͕޿͍ ϧʔϓ੍ޚ ஋औग़ɺ ৚݅ Ճࢉॲཧ͕ҰମԽ ҙຯͷҟͳΔ஋ͷ୅ೖ

Slide 10

Slide 10 text

record StudentScore(String name, String className, int score) {} List scores = ...; final double ave = scores.stream() .filter(ss -> ss.className().equals("A")) .collect(Collectors.averagingDouble( ss -> ss.scores() )); ஋औग़ ৚݅ Πϛϡʔλϒϧม਺ ฏۉ஋ࢉग़

Slide 11

Slide 11 text

ϥϜμࣜ ແ໊ ؔ਺ ࢖͏্Ͱ͸ Ϋϥεʹ͸ଐ͞ͳ͍ ୯ମͰॲཧ͚ͩهड़͢Δ

Slide 12

Slide 12 text

ϥϜμࣜͷܕ͸ؾʹ͠ͳ͍ List nums = ...; var sortedNums = nums.stream() .sorted( (x1, x2) -> x1-x2 ) .toList(); ྫϦετͷιʔτ ͜ͷϥϜμࣜͷܕ͕ Comparatorͳͷ͔ BiFunction ͳͷ͔ ߟ͑Δඞཁ͸ͳ͍ ॏཁͳͷ͸ Ҿ਺Ͱൺֱ݁ՌΛ JOU Ͱฦ͢ͱ͍͏͜ͱ

Slide 13

Slide 13 text

ϥϜμࣜͰॏཁͳͷ͸γάωνϟʔ Ҿ਺ͷݸ਺ܕ ໭Γ஋ͷ༗ແܕ List nums = ...; var sortedNums = nums.stream() .sorted( (x1, x2) -> x1-x2 ) .toList(); Ҿ਺ݸ਺ Ҿ਺ܕ Integer, Integer ໭Γ஋ ͋Γ ໭Γ஋ܕ Integer

Slide 14

Slide 14 text

ϥϜμࣜͰॏཁͳͷ͸γάωνϟʔ java.util.functionͷؔ਺ܕΠϯλϑΣʔε͸ γάωνϟʔΛ۠ผ͢ΔͨΊͷ΋ͷ Ҿ਺ͳ͠ Ҿ਺ Ҿ਺ Ҿ਺ ໭Γ஋͋Γ ໭Γ஋͋Γ ໭Γ஋boolean ໭Γ஋ͳ͠ Supplier Function Predicate Consumer

Slide 15

Slide 15 text

ϥϜμࣜΛॻ͘ʹ͸ ϥϜμ͚ࣜͩͰߟ͑ͣɺ ϥΠϒϥϦͱڞʹ ϥϜμ͕ࣜҾ਺ɺ ໭Γ஋ͱͳΔߴ֊ؔ਺Ͱͷར༻͕΄ͱΜͲ Project Lambda͸୯ͳΔݴޠػೳͰ͸ͳ͘ɺ ϥΠϒϥϦ΋ର৅ͱ͍ͯ͠·͢ɻ ݴޠػೳͱϥΠϒϥϦ͕Ұମͱͳͬͯɺ Javaϓϩάϥϛϯά ɾ ϞσϧΛେ෯ʹ ΞοϓάϨʔυ͠·͢ɻ Brian Goetz Project Lambdaͷల๬ Java Magazine Oct. 2012

Slide 16

Slide 16 text

ϥϜμࣜΛॻ͘ʹ͸ ϥϜμ͚ࣜͩͰߟ͑ͣɺ ϥΠϒϥϦͱڞʹ ϥϜμ͕ࣜҾ਺ɺ ໭Γ஋ͱͳΔߴ֊ؔ਺Ͱͷར༻͕΄ͱΜͲ ॲཧ͸͚ͭͩ ॲཧ͕ෳ਺͋Ε͹ɺ ෳ਺ͷϥϜμࣜʹ෼ׂ ॲཧʹ࢖༻͢Δσʔλ͸Ҿ਺͚ͩʹ͢Δ ϥϜμࣜͷ֎ଆͷσʔλʹ͸Ͱ͖Δ͚ͩΞΫηε͠ͳ͍ ॲཧ݁ՌΛ໭Γ஋Ҏ֎Ͱ໭͞ͳ͍ ม਺͸Πϛϡʔλϒϧʹ͢Δ

Slide 17

Slide 17 text

·ͱΊ ϥϜμࣜ͸ ແ໊ ؔ਺ +BWBͰ΋એݴతهड़͕૿Ճத ϥϜμࣜͷۤखҙࣝΛͳ͘͢ʹ͸ खଓ͖తࢥߟ͔Βͷ୤٫͕ඞཁ ࢀߟͳͬͱؔ͘਺ܕϓϩάϥϛϯά Michał Płachta