Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Stream API 入門 #jjug #javajo

Stream API 入門 #jjug #javajo

Java女子部「Java本格入門!!!著者をお招きしちゃうよ(*´∀`*) 」
https://javajo.doorkeeper.jp/events/60742

JJUG ナイトセミナー 「Java エンジニアのためのJava(再)入門」
https://jjug.doorkeeper.jp/events/61857

Shin Tanimoto

June 11, 2017
Tweet

More Decks by Shin Tanimoto

Other Decks in Programming

Transcript

  1. 4USFBN"1*ೖ໳
    ʙ͍·͞Βฉ͚ͳ͍4USFBNͷΩϗϯ
    "DSPRVFTU5FDIOPMPHZגࣜձࣾ

    ೔ຊ+BWBϢʔβʔάϧʔϓ
    ୩ຊ৺ [email protected]

    View Slide

  2. ͳͥɺ4USFBN"1*Λ

    ֶͿ΂͖ͳͷ͔ʁ

    View Slide

  3. ৽͍͔͠Βʁ
    ੑೳ͕͍͍͔Βʁ
    ؆ܿʹॻ͚Δ͔Βʁ

    View Slide

  4. 4USFBN"1*ͷΑ͏ͳ

    ෺ࣄͷଊ͑ํ͕ࠓޙ਺೥ͷ

    ίʔσΟϯάʹඞཁͱ

    ͳͬͯ͘Δ͔Β

    View Slide

  5. ৄ͍͠࿩͸ޙͰ΍Γ·͢

    View Slide

  6. ·ͣ͸ʮ؆ܿʹॻ͚Δ͔Βʯ

    ͩͱଊ͑ͯ࢝Ί·͠ΐ͏

    View Slide

  7. 5BCMFPG$POUFOUT
    w 4USFBN"1*ͱ͸ʁ
    w -BNCEBࣜͱ͸ʁ
    w 4USFBN"1*ͷॻ͖ํͱɺԡ͑͞ΔϙΠϯτ
    w ͳͥ4USFBN"1*͕ॏཁͳͷ͔

    View Slide

  8. 4USFBN"1*ͱ͸ʁ

    View Slide

  9. 4USFBNྲྀΕ

    View Slide

  10. View Slide

  11. ৄ͍͠࿩͸ޙͰ΍Γ·͢

    View Slide

  12. େྔσʔλΛஞ࣍ॲཧ͢Δ

    ʮετϦʔϜॲཧʯΛ

    ؆ܿʹॻͨ͘Ίͷ"1*

    View Slide

  13. ͚ͩͲɺ

    ίϨΫγϣϯͷૢ࡞Λ

    ؆ܿʹॻ͘͜ͱ΋Ͱ͖Δ

    View Slide

  14. List students = new ArrayList<>();
    students.add(new Student("Ken", 100));
    students.add(new Student("Shin", 60));
    students.add(new Student("Takuya", 80));
    for (Student student : students) {
    if (student.getScore() >= 70) {
    System.out.println(student);
    }
    }
    ͜Ε͕

    View Slide

  15. List students = new ArrayList<>();
    students.add(new Student("Ken", 100));
    students.add(new Student("Shin", 60));
    students.add(new Student("Takuya", 80));

    students.stream()
    .filter(s -> s.getScore() >= 70)
    .forEach(System.out::println);
    ͜͏ͳΔ

    View Slide

  16. ίϨΫγϣϯͷ

    ߜΓࠐΈɺม׵΍ɺ

    ͦΕͧΕͷཁૉ΁ͷॲཧɺ

    ूܭͳͲ͕Ͱ͖Δ

    View Slide

  17. ͱ͸ݴ͑

    View Slide

  18. Map groupByDeptAndFilter(List list) {
    return list.stream()
    .collect(Collectors.groupingBy(emp -> emp.dept))
    .entrySet()
    .stream()
    .collect(Collectors.toMap(entry -> entry.getKey(),
    entry -> entry.getValue()
    .stream()
    .filter(emp -> emp.sal > 1000)
    .count()));
    }

    View Slide

  19. Կ͜ΕಡΊͳ͍

    View Slide

  20. GPSจΛ࢖ͬͯ

    ॻ͖௚͢ͱ

    View Slide

  21. Map groupByDeptClassic(List list) {
    Map result = new HashMap<>();
    for (Emp emp : list) {
    if (result.containsKey(emp.dept) == false) {
    result.put(emp.dept, 0L);
    }
    if (emp.sal > 1000) {
    Long count = result.get(emp.dept);
    count++;
    result.put(emp.dept, count);
    }
    }
    return result;
    }

    View Slide

  22. ಡΈ΍͍͢ʂ

    ✌ Т✌
    ࡾ✌ Т
    ✌ࡾ ✌Т

    View Slide

  23. Έ͍ͨͳ͜ͱʹͳΔͷͰ

    ແཧͯ͠ෳࡶͳ΋ͷΛ

    4USFBN"1*Ͱ

    ॻ͘ඞཁ͸ͳ͍Ͱ͢

    View Slide

  24. ৽͍͠΋ͷΛ࢖͏͜ͱ͕

    ৗʹΤϥ͍Θ͚͡Όͳ͍

    View Slide

  25. ผʹੑೳ΋มΘΜͳ͍

    View Slide

  26. ·ͣ͸جຊతͳॻ͖ํͱ

    ͦͷ֓೦Λֶͼ·͠ΐ͏

    View Slide

  27. -BNCEBࣜͱ͸ʁ

    View Slide

  28. ˓ϥϜμࣜ

    ºϥϯόμࣜ

    View Slide

  29. List students = new ArrayList<>();
    students.add(new Student("Ken", 100));
    students.add(new Student("Shin", 60));
    students.add(new Student("Takuya", 80));

    students.stream()
    .filter(s -> s.getScore() >= 70)
    .forEach(System.out::println);
    ͜ͷ෦෼

    View Slide

  30. 4USFBN"1*Λ

    ؆ܿʹॻͨ͘Ίʹ

    ͔ܽͤͳ͍΋ͷ

    View Slide

  31. -BNCEBࣜͱ͸

    ࣮૷͢΂͖ϝιου͕

    ͔ͭ͠ͳ͍ΠϯλϑΣʔεΛ

    ؆ܿʹදهͰ͖Δ΋ͷ

    View Slide

  32. ͨͱ͑͹
    KBWBVUJM$PNQBSBUPS


    ࣮૷͢Δ΂͖ϝιου͸

    DPNQBSF

    View Slide

  33. void sort() {
    List studentList = new ArrayList<>();
    studentList.add(new Student("Murata", 100));
    studentList.add(new Student("Okada", 70));
    studentList.add(new Student("Tanimoto", 80));
    System.out.println(studentList);
    Collections.sort(studentList, new StudentComparator());
    System.out.println(studentList);
    }
    class StudentComparator implements Comparator {
    @Override
    public int compare(Student student1, Student student2) {
    return Integer.compare(student1.getScore(),
    student2.getScore());
    }
    }
    ͜ͷ෦෼

    View Slide

  34. void sortAnonymous() {
    List studentList = new ArrayList<>();
    studentList.add(new Student("Murata", 100));
    studentList.add(new Student("Okada", 70));
    studentList.add(new Student("Tanimoto", 80));
    System.out.println(studentList);
    Collections.sort(studentList, new Comparator() {
    @Override
    public int compare(Student student1, Student student2) {
    return Integer.compare(student1.getScore(),
    student2.getScore());
    }
    });
    System.out.println(studentList);
    }
    ແ໊ΫϥεΛ࢖͏ͱ

    View Slide

  35. void sortLambda() {
    List studentList = new ArrayList<>();
    studentList.add(new Student("Murata", 100));
    studentList.add(new Student("Okada", 70));
    studentList.add(new Student("Tanimoto", 80));
    System.out.println(studentList);
    Collections.sort(studentList, (student1, student2)
    -> Integer.compare(student1.getScore(), student2.getScore()));
    System.out.println(studentList);
    }
    -BNCEBΛ࢖͏ͱ

    View Slide

  36. ࣮૷͢΂͖ϝιου͕

    ͔ͭ͠ͳ͍ΠϯλϑΣʔεΛ

    ʮؔ਺ܕΠϯλϑΣʔεʯ

    ͬͯݺͼ·͢

    View Slide

  37. 4USFBN"1*ͷҾ਺͸

    جຊతʹ͢΂ͯ

    ؔ਺ܕΠϯλϑΣʔε

    View Slide

  38. 4USFBN"1*Λ͢΂ͯ

    ແ໊ΫϥεͰ࡞Δͱ

    ಡΈͮΒͯ͘࢓ํͳ͍ͷͰ

    ؔ਺ͬΆ͘ॻ͚Δ

    -BNCEB͕ࣜಋೖ͞Εͨ

    View Slide

  39. List students = new ArrayList<>();
    students.add(new Student("Ken", 100));
    students.add(new Student("Shin", 60));
    students.add(new Student("Takuya", 80));

    students.stream()
    .filter(s -> s.getScore() >= 70)
    .forEach(System.out::println);
    ΋͜͠Ε͕

    View Slide

  40. List students = new ArrayList<>();
    students.add(new Student("Ken", 100));
    students.add(new Student("Shin", 60));
    students.add(new Student("Takuya", 80));
    students.stream()
    .filter(new Predicate() {
    @Override
    public boolean test(Student student) {
    return student.getScore() >= 70;
    }
    })
    .forEach(new Consumer() {
    @Override
    public void accept(Student student) {
    System.out.println(student);
    }
    });
    ͜͏ͳΒ

    View Slide

  41. ୭΋͓લΛѪ͞ͳ͍

    View Slide

  42. -BNCEBࣜͷจ๏

    View Slide

  43. -BNCEBࣜͷجຊจ๏


    Ҿ਺
    \ॲཧ^

    View Slide

  44. (Student student1, Student student2) -> {
    int score1 = student1.getScore();
    int score2 = student2.getScore();
    return Integer.compare(score1, score2);
    }
    (Student student) -> {

    System.out.println(student);
    }
    () -> {

    System.out.println("Hello!");
    }

    View Slide

  45. Ҿ਺ͷܕ͸লུͰ͖Δ

    View Slide

  46. (Student student1, Student student2) -> {
    int score1 = student1.getScore();
    int score2 = student2.getScore();
    return Integer.compare(score1, score2);
    }
    (student1, student2) -> {
    int score1 = student1.getScore();
    int score2 = student2.getScore();
    return Integer.compare(score1, score2);
    }

    View Slide

  47. ॲཧ͕ߦͳΒ
    SFUVSOͱ\^͕

    লུͰ͖Δ

    View Slide

  48. (student1, student2) -> {
    int score1 = student1.getScore();
    int score2 = student2.getScore();
    return Integer.compare(score1, score2);
    }


    (student1, student2) -> {
    return Integer.compare(student1.getScore(), student2.getScore());
    }
    (student1, student2) ->
    Integer.compare(student1.getScore(), student2.getScore())

    View Slide

  49. Ҿ਺͕ͭͳΒ


    ΋লུͰ͖Δ

    View Slide

  50. (Student student) -> {

    System.out.println(student);
    }



    student -> System.out.println(student)

    View Slide

  51. -BNCEBͷத਎͕

    ϝιουݺͼग़ͭ͠Ͱ

    Ҿ਺΋໌֬ͳΒ

    ϝιουࢀর͕࢖͑Δ

    View Slide

  52. ϝιουࢀরͷจ๏
    Ϋϥε໊ϝιου໊

    View Slide

  53. (Student student) -> {

    System.out.println(student);
    }



    student -> System.out.println(student)
    System.out::println

    View Slide

  54. (Student student) -> {

    return student.getScore();
    }



    student -> student.getScore();
    Student::getScore

    View Slide

  55. List students = new ArrayList<>();
    students.add(new Student("Ken", 100));
    students.add(new Student("Shin", 60));
    students.add(new Student("Takuya", 80));

    students.stream()
    .filter(s -> s.getScore() >= 70)
    .forEach(System.out::println);
    ݁Ռɺ͜͏ͳΔ

    View Slide

  56. ͜͜·Ͱ͸0,ʁ

    View Slide

  57. 4USFBN"1*ͷॻ͖ํͱ

    ԡ͑͞ΔϙΠϯτ

    View Slide

  58. ࡞Δ
    ૢ࡞͢Δ
    ·ͱΊΔ

    View Slide

  59. Α͘࢖͏ύλʔϯ

    TUSFBN
    Ͱ࡞Γ
    NBQ
    ͰՃ޻͠

    pMUFS
    ͰߜΓࠐΈ

    DPMMFDU
    Ͱཉ͍͠ܗʹ͢Δ

    View Slide

  60. ࡞Δ

    View Slide

  61. 4USFBNΛฦ͢"1*Λ

    ݺͼग़͢͜ͱͰ

    4USFBNΛ࡞Δ

    View Slide

  62. List lines
    = Arrays.asList("Murata=100", "Okada=60", "Tanimoto=80");
    List students = lines.stream()
    .map(s -> {
    String[] strings = s.split("=");
    return new Student(strings[0], Integer.valueOf(strings[1]));
    })
    .filter(s -> s.getScore() >= 70)
    .collect(Collectors.toList());
    $PMMFDUJPOTUSFBN

    View Slide

  63. String[] lines = {"Murata=100", "Okada=60", "Tanimoto=80"};
    List students = Arrays.stream(lines)
    .map(s -> {
    String[] strings = s.split("=");
    return new Student(strings[0], Integer.valueOf(strings[1]));
    })
    .filter(s -> s.getScore() >= 70)
    .collect(Collectors.toList());
    "SSBZTTUSFBN

    View Slide

  64. .BQͳΒ
    FOUSZ4FU
    TUSFBN

    ϑΝΠϧΛߦͣͭಡΉͳΒ
    'JMFTMJOFT

    #VGGFSFE3FBEFSMJOFT

    View Slide

  65. ૢ࡞͢Δ

    ʢதؒૢ࡞ʣ

    View Slide

  66. ઈରʹ֮͑ͯཉ͍͠
    NBQͱpMUFS

    View Slide

  67. ม׵΍ߜΓࠐΈͳͲͷ

    ૢ࡞Λߦ͏ͷ͕தؒૢ࡞

    View Slide

  68. NBQ

    ཁૉΛผͷཁૉʹม׵͢Δ
    pMUFS
    ৚݅Λࢦఆͯ͠ߜΓࠐΉ

    View Slide

  69. List lines =
    Arrays.asList("Murata=100", "Okada=60", "Tanimoto=80");
    List students = lines.stream()
    .map(s -> {
    String[] strings = s.split("=");
    return new Student(strings[0], Integer.valueOf(strings[1]));
    })
    .filter(s -> s.getScore() >= 70)
    .collect(Collectors.toList());
    }
    NBQͱpMUFS

    View Slide

  70. List lines =
    Arrays.asList("Murata=100", "Okada=60", "Tanimoto=80");
    List students = lines.stream()
    .map(s -> {
    String[] strings = s.split("=");
    return new Student(strings[0], Integer.valueOf(strings[1]));
    })

    // この時点でStudentのstreamになる
    .filter(s -> s.getScore() >= 70)
    // この時点でMurataとTanimotoが残ったstreamになる
    .collect(Collectors.toList());
    }
    NBQͱpMUFS

    View Slide

  71. MJNJUͰ݅਺ΛߜΔ
    EJTUJODUͰϢχʔΫʹߜΔ

    TPSUFEͰฒ΂ม͑Δ

    ͳͲͳͲ

    View Slide

  72. Α͋͘Δޡղࠞཚ

    View Slide

  73. NBQͳͲͷม׵ॲཧͰ͸

    ཁૉͷ਺͸มΘΒͳ͍

    View Slide

  74. ཁૉΛ͍͔ͭ͘·ͱΊͯ

    ॲཧ͢Δ

    Έ͍ͨͳ͜ͱ͸Ͱ͖ͳ͍

    ʢྫɿෳ਺ߦͷϩάϑΝΠϧॲཧʣ

    View Slide

  75. ͋͘·Ͱɺ݅݅ɺ

    Կ͔͢Δ͍ͬͯ͏΋ͷ

    View Slide

  76. pMUFSͰ෼ذ͢Δ͜ͱ͸

    Ͱ͖ͳ͍

    View Slide

  77. ͜ͷ৚݅ͷ4USFBNɺ

    ͦͷ৚݅ͷ4USFBNɺ

    ͋ͷ৚݅ͷ4USFBNɺ

    ͲΕʹ΋֘౰͠ͳ͍4USFBN

    Έ͍ͨͳ͜ͱ͸Ͱ͖ͳ͍

    View Slide

  78. ͋͘·Ͱ΋

    4USFBN͸ຊ

    View Slide

  79. qBU.BQΛ࢖͑͹
    ͭͷཁૉ͔Β

    ෳ਺ͷཁૉΛ

    ࡞Δ͜ͱ͸Ͱ͖Δ

    View Slide




  80. ͔Β

    ͸࡞ΕΔ

    View Slide

  81. Ͱ΋આ໌͸ׂѪ͢ΔΑʂ

    View Slide

  82. ·ͱΊΔ

    ʢऴ୺ૢ࡞ʣ

    View Slide

  83. 4USFBNΛ

    -JTUʹͨ͠Γ.BQʹͨ͠Γ
    ߹ܭ஋΍ฏۉ஋Λܭࢉͨ͠Γ

    View Slide

  84. ࠷ޙʹ݁Ռͱͯ͠

    औΓग़͢΋ͷ͕

    ऴ୺ૢ࡞

    View Slide

  85. Ұ൪࢖͏ͷ͕

    DPMMFDUͱ$PMMFDUPSTͷ

    ૊Έ߹Θͤ

    View Slide

  86. List lines =
    Arrays.asList("Murata=100", "Okada=60", "Tanimoto=80");
    List students = lines.stream()
    .map(s -> {
    String[] strings = s.split("=");
    return new Student(strings[0], Integer.valueOf(strings[1]));
    })
    .filter(s -> s.getScore() >= 70)
    .collect(Collectors.toList());
    }
    DPMMFDU

    View Slide

  87. $PMMFDUPSTUP4FU

    $PMMFDUPSTUP.BQ
    Ͱ4FU΍.BQʹม׵

    View Slide

  88. String[] lines = {"Murata=100", "Okada=60", "Tanimoto=80"};
    Map students = Arrays.stream(lines)
    .map(s -> {
    String[] strings = s.split("=");
    return new Student(strings[0], Integer.valueOf(strings[1]));
    })
    .collect(Collectors.toMap(s -> s.getName(), s -> s));
    return students;
    $PMMFDUPSTUP.BQ

    View Slide

  89. $PMMFDUPSTKPJOJOHͰ

    શ෦ͭͳ͛ͨจࣈྻʹม׵

    View Slide

  90. $PMMFDUPSTHSPVQJOH#Z
    Ͱ

    -JTUͷ.BQΛ࡞Δ

    View Slide

  91. DPMMFDUҎ֎ͷऴ୺ૢ࡞

    View Slide

  92. GPS&BDI

    ೚ҙͷॲཧΛ͢Δ

    ʢ໭Γ஋ͳ͠ʣ

    View Slide

  93. NBY NJO

    ࠷େͷ݅ɺ࠷খͷ݅ΛऔΔ
    pOE'JSTU

    ࠷ॳͷ݅ΛऔΔ

    View Slide

  94. ਺஋ͷ4USFBNͳΒ

    BWFSBHFͱ͔΋औΕΔ

    View Slide

  95. ཁ͢Δʹ

    4USFBNΛ

    ԿΒ͔ͷܗͰ

    ू໿ͯ͠औΓग़͢΋ͷ

    View Slide

  96. ऴ୺ૢ࡞͸

    Ұճ͔͠Ͱ͖ͳ͍

    View Slide

  97. UP-JTUͱGPS&BDIͷ

    ྆ํΛ͢Δ͜ͱ͸Ͱ͖ͳ͍

    View Slide

  98. ͱ͍͏ลΓΛ౿·͑ͯ

    GSPNPME+BWB

    UPNPEFSO+BWB

    View Slide

  99. List list = new ArrayList<>();
    try (BufferedReader reader = Files.newBufferedReader(Paths.get(fileName))) {
    String line;
    while ((line = reader.readLine()) != null) {
    String[] s = line.split(",");
    Transaction tx = new Transaction();
    tx.date = LocalDate.parse(s[0]);
    tx.accountId = s[1];
    tx.amount = Integer.valueOf(s[2]);
    tx.name = s[3];
    tx.note = s[4];
    list.add(tx);
    }
    } catch (IOException e) {
    throw new RuntimeException("failed to parse date or read file", e);
    }
    return list;
    GSPN

    View Slide

  100. try (Stream stream = Files.lines(Paths.get(fileName))) {
    return stream
    .map(line -> {
    String[] s = line.split(",");
    Transaction tx = new Transaction();
    tx.date = LocalDate.parse(s[0]);
    tx.accountId = s[1];
    tx.amount = Integer.valueOf(s[2]);
    tx.name = s[3];
    tx.note = s[4];
    return tx;
    })
    .collect(Collectors.toList());
    } catch (IOException e) {
    throw new UncheckedIOException("failed to read file", e);
    }
    UP4USFBN

    View Slide

  101. try (Stream stream = Files.lines(Paths.get(fileName))) {
    return stream
    .map(line -> {
    String[] s = line.split(",");
    Transaction tx = new Transaction();
    tx.date = LocalDate.parse(s[0]);
    tx.accountId = s[1];
    tx.amount = Integer.valueOf(s[2]);
    tx.name = s[3];
    tx.note = s[4];
    return tx;
    })
    .collect(Collectors.toList());
    } catch (IOException e) {
    throw new UncheckedIOException("failed to read file", e);
    }
    UP4USFBN
    ϑΝΠϧΛಡΈࠐΜͰ

    Streamͱͯ͠ฦ͢ϝιου

    ʢߦ͝ͱʹॲཧʣ
    ߦͷStringΛ

    Transactionʹม׵
    Listʹͯ͠ฦ͢

    View Slide

  102. // 取引履歴の取得
    List list = read(fileName);
    // 全件表示
    for (Transaction tx : list) {
    System.out.println(tx);
    }
    // 残高の計算
    int sum = 0;
    for (Transaction tx : list) {
    sum += tx.amount;
    }
    System.out.println(sum);
    // 6月分のみ表示
    for (Transaction tx : list) {
    if (tx.date.getMonth() == Month.JUNE) {
    System.out.println(tx);
    }
    }
    GSPN

    View Slide

  103. // 取引履歴の取得
    read(fileName).stream()
    .forEach(System.out::println);
    // 残高の計算
    int sum = read(fileName).stream()
    .mapToInt(tx -> tx.amount)
    .sum();
    System.out.println(sum);
    // 6月分のみ表示
    read(fileName).stream()
    .filter(tx -> tx.date.getMonth() == Month.JUNE)
    .forEach(System.out::println);
    UP4USFBN

    View Slide

  104. // 取引履歴の取得
    read(fileName).stream()
    .forEach(System.out::println);
    // 残高の計算
    int sum = read(fileName).stream()
    .mapToInt(tx -> tx.amount)
    .sum();
    System.out.println(sum);
    // 6月分のみ表示
    read(fileName).stream()
    .filter(tx -> tx.date.getMonth() == Month.JUNE)
    .forEach(System.out::println);
    UP4USFBN
    ͢΂ͯͷཁૉʹ͍ͭͯ

    ॱ൪ʹॲཧ
    औҾֹΛint஋ͱͯ͠औΓग़ͯ͠

    intͷstreamʢIntStreamʣʹ͔ͯ͠Β

    ߹ܭ஋Λऔಘ
    6݄ͷΈΛऔΓग़ͯ͠

    શ݅දࣔ

    View Slide

  105. ΋͏গ͠ࠐΈೖͬͨ಺༰͸

    ϥΠϒίʔσΟϯάͰ

    View Slide

  106. ͳͥ4USFBN"1*͕

    ॏཁͳͷ͔ʁ

    View Slide

  107. $PMMFDUJPOΛ؆ܿʹ

    ѻ͑ΔΑ͏ʹͳΔมΘΓʹ

    ݁ߏɺ֮͑Δ͜ͱ͕ଟ͍

    View Slide

  108. େͯ͠༥௨΋ར͔ͳ͍

    View Slide

  109. ͡Ό͊ͳΜͰ4USFBNΛ

    ࢖͏ͷ͔ʁ

    View Slide

  110. 4USFBN"1*ͷ

    େ͖ͳ໨త͸

    4USFBNΛѻ͏͜ͱ

    View Slide

  111. View Slide

  112. $PMMFDUJPO͸

    طʹ಺༰͕ܾ·͍ͬͯΔ

    σʔλ
    ʢ$PME4USFBNʣ

    View Slide

  113. ຊདྷͷ4USFBN͸

    ઈ͑ͣͯ͠

    ͔͠΋΋ͱͷਫʹ͋Βͣ

    View Slide

  114. 8FCͷϦΫΤετ΍

    ΩϡʔΠϯάॲཧͳͲ
    ಺༰΍্ݶ͕

    ܾ·ͬͯͳ͍΋ͷ

    ʢ)PU4USFBNʣ

    View Slide

  115. +BWBͷ4USFBN"1*͸

    جຊతʹ$PME4USFBNΛ

    ѻ͏ͨΊͷ΋ͷ

    View Slide

  116. ओઓ৔͸)PU4USFBN

    View Slide

  117. )PU4USFBNʹ

    ඞཁͳ΋ͷ

    View Slide

  118. ΢Οϯυ΢ؔ਺

    View Slide

  119. ྫɿ
    ਺ສͷηϯαʔ͔Β

    ૹ৴͞Εͨ৘ใΛ

    ड৴͠ͳ͕Β

    ूܭॲཧΛ͢Δ

    View Slide

  120. ड৴ॲཧͱฒߦͯ͠ɺ

    ਺݅ͣͭ·ͱΊͯूܭ͢Δɺ

    ਺ඵͣͭूܭ͢Δɺ

    ໰୊͕͋Ε͹Ξϥʔτ

    View Slide

  121. ͦΜͳ͜ͱ͕Ͱ͖Δ

    ΢Οϯυ΢ؔ਺͕ඞཁ

    View Slide

  122. +BWBͰଟগ͸ೖΔ͕

    ࠓͷͱ͜Ζ͸

    3Y+BWB΍3FBDUPSΛ࢖͏

    View Slide

  123. void monitorGauge(Flux input) {
    input.bufferTimeout(100, Duration.ofSeconds(10))
    .subscribe(list -> {
    DoubleSummaryStatistics stats = list.stream()
    .mapToDouble(Double::doubleValue)
    .summaryStatistics();
    if (stats.getMax() > maxThreshold) {
    alert(Level.WARNING);
    }
    if (stats.getAverage() > averageThreshold) {
    alert(Level.SEVERE);
    }
    });
    }
    3FBDUPSͷ"1*

    View Slide

  124. void monitorGauge(Flux input) {
    input.bufferTimeout(100, Duration.ofSeconds(10))
    .subscribe(list -> {
    DoubleSummaryStatistics stats = list.stream()
    .mapToDouble(Double::doubleValue)
    .summaryStatistics();
    if (stats.getMax() > maxThreshold) {
    alert(Level.WARNING);
    }
    if (stats.getAverage() > averageThreshold) {
    alert(Level.SEVERE);
    }
    });
    }
    3FBDUPSͷ"1*
    100݅΋͘͠͸10ඵؒͷσʔλΛ

    ·ͱΊͯॲཧ͢Δ
    ʢूܭͯ͠ᮢ஋Λ௒͑ͨΒΞϥʔτʣ

    View Slide

  125. ϊϯϒϩοΩϯά"1*

    View Slide

  126. ྫɿ

    σʔλετΞ͔Β

    ສ݅ͷϨίʔυΛ

    औಘͨ͋͠ͱ

    ͦͷৄࡉσʔλΛ݅ͣͭ

    ສճऔಘ͢Δ

    View Slide

  127. ֓ཁσʔλΛऔಘ͔ͯ͠Β

    ৄࡉσʔλΛऔಘ͢Δ

    View Slide

  128. ͜Ε·Ͱ͸ಉظॲཧͰ

    σʔλϕʔεʹΞΫηε͢Δ

    Α͏ͳγεςϜΛͣͬͱ

    ࡞͖ͬͯ·ͨ͠

    View Slide

  129. 42-Λສճ

    ൃߦ͢Δඞཁ͕͋Ε͹

    ॱ൪ʹສճൃߦͯ͠

    ੑೳ໰୊͕ى͖͍ͯ·ͨ͠

    View Slide

  130. WebΞϓϦ DB
    1ສճͷSQLͰ

    ੑೳ໰୊͕ൃੜ

    View Slide

  131. WebΞϓϦ DB
    ͪΐͬͱ޻෉ͯ͠

    গ͠ॏ͍ͨΫΤϦͰΧόʔ

    View Slide

  132. ϚΠΫϩαʔϏε ϚΠΫϩαʔϏε
    1ສճͷαʔϏεݺͼग़͠

    View Slide

  133. ϚΠΫϩαʔϏε ϚΠΫϩαʔϏε
    ͜ͷ1ສճͷαʔϏεݺͼग़͠Λ

    ʮͰ͖Δ͚ͩಉ࣌ʹʯ

    ࣮ߦ͍ͨ͠

    View Slide

  134. ϊϯϒϩοΩϯάͳ

    ඇಉظ"1*ͱͯ͠

    ΍͸Γ

    3Y+BWBɺ3FBDUPSΛ࢖͏

    View Slide

  135. Mono>> map =

    studentService.fetchStudents("1年3組")
    .flatMap(student -> scoreService.fetchScore(2017, student.id)

    .collectList()
    .map(scores -> Tuples.of(student, scores)))
    .collectMap(Tuple2::getT1, Tuple2::getT2);
    // 出力
    System.out.println(map.block());



    // 呼び出すAPI
    Flux fetchStudents(String className);
    Flux fetchScore(int year, int id)
    3FBDUPSͷ"1*

    View Slide

  136. Mono>> map =

    studentService.fetchStudents("1年3組")
    .flatMap(student -> scoreService.fetchScore(2017, student.id)

    .collectList()
    .map(scores -> Tuples.of(student, scores)))
    .collectMap(Tuple2::getT1, Tuple2::getT2);
    // 出力
    System.out.println(map.block());



    // 呼び出すAPI
    Flux fetchStudents(String className);
    Flux fetchScore(int year, int id)
    3FBDUPSͷ"1*
    ʢৄࡉ͸ׂѪ͢Δ͚Ͳʣ

    APIݺͼग़͠ΛϊϯϒϩοΩϯά͔ͭ

    ඇಉظʹݺͼग़͢͜ͱͰ

    ॲཧશମͷ࣌ؒΛ୹ॖ

    ͔͠΋ར༻εϨου਺͕গͳ͍

    View Slide

  137. ͜͏͍͏΋ͷ͸ɺ͢΂ͯ

    4USFBN"1*ͷΑ͏ͳ

    ܗͰهड़͞ΕΔ͜ͱʹͳΔ

    View Slide

  138. ॲཧͷฒྻ౓Λ͋͛ͯ

    େྔσʔλ΍

    େྔϦΫΤετΛ

    ࡹ͘Α͏ͳ࣌୅

    View Slide

  139. ͦ͜ʹ޲͚ͨ४උͱͯ͠

    4USFBN"1*Λ

    शಘ͍ͯͩ͘͠͞

    View Slide

  140. -FU`T4UVEZ

    4USFBN"1*

    View Slide

  141. Ξϯέʔτޚڠྗ͓ئ͍͠·͢

    IUUQCJUMZKKVH

    View Slide

  142. +BWBຊ֨ೖ໳Λ

    ങͬͯͩ͘͞Δํ͸

    ͥͻ࿩͔͚͍ͯͩ͘͠͞

    View Slide