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

60分で体験するStream/Lambdaハンズオン

 60分で体験するStream/Lambdaハンズオン

Java Doでしょう #1 (8/23,札幌)

Hiroto YAMAKAWA

August 28, 2015
Tweet

More Decks by Hiroto YAMAKAWA

Other Decks in Programming

Transcript

  1.  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]);   }
  2.  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 Ͱදࣔ͢Δ
  3. 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);      }   }
  4.  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));
  5.  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͕Θ͔Γ΍͍͢ ετϦʔϜɾύΠϓϥΠϯ
  6.  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ʹมԽͤ͞Δ͚ͩͰɺ
 ฒྻॲཧʹͳΔ ˞ॱংอূͩͱύϑΥʔϚϯε͸Լ͕Δ
  7.  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));
  8.  -BNCEBࣜ ɾn  -­‐>  n  >=  20   ɾn  -­‐>

     Integer.toBinaryString(n)   ɾn  -­‐>  System.out.println(n) 4USFBNͷதʹݱΕͨ ͜ΕΒ͕-BNCEBʢϥϜμʣࣜɻ ϥϜμࣜ͸ɺzࣜzͷ༷ʹॲཧʢؔ਺ʣΛॻ͚Δ ʮؔ਺ΦϒδΣΫτʯ +BWBͰ͸ɺؔ਺ܕΠϯλʔϑΣʔεͷແ໊Ϋϥε͕ݪܕ
  9. ແ໊Ϋϥε ΠϯελϯεԽͷࡍʹ\^Λ͚ͭΔ͜ͱͰɺαϒΫϥε΍Πϯλʔ ϑΣʔεͷ࣮૷ΫϥεͷΦϒδΣΫτΛͦͷ৔Ͱ࡞Δ͜ͱ͕Ͱ͖Δɻ ͜ͷαϒΫϥεʹ͸ɺΫϥε໊͕ͳ͍ɻ ͜ͷख๏ʢͱɺ࡞ΒΕͨΫϥεʣΛແ໊Ϋϥεͱ͍͏ɻ public  class  GamePlayer  extends  AbstractPlayer

     {      //  AbstractPlayerͷαϒΫϥε    //  ͜ͷαϒΫϥεʹ͸(BNF1MBZFSͱ͍͏Ϋϥε໊લ͕͋Δ   } AbstractPlayer  player  =  new  AbstractPlayer()  {      //  ͜ͷΦϒδΣΫτ͸ɺAbstractPlayerͷαϒΫϥεͷΦϒδΣΫτͱͳΔ    //  αϒΫϥεʹ͸Ϋϥε໊͕ଘࡏ͠ͳ͍ͷͰɺແ໊Ϋϥεͱݺ͹ΕΔ   }; ˣ௨ৗͷαϒΫϥε ˢແ໊Ϋϥε
  10. 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ͷແ໊Ϋϥε
  11. 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);ɹ ແ໊Ϋϥε͔ΒϥϜμࣜ΁
  12. int[]  ages  =  new  int[]{22,  10,  19,  38};   IntConsumer

     consumer  =    n  -­‐>  System.out.println(n);       Arrays.stream(ages)              .forEach(consumer);ɹ ϥϜμࣜ
  13. int[]  ages  =  new  int[]{22,  10,  19,  38};   IntConsumer

     consumer  =    n  -­‐>  System.out.println(n);   Arrays.stream(ages)              .forEach(n  -­‐>  System.out.println(n));ɹ Ҿ਺ʹ௚઀౉͢
  14. Ξϩʔԋࢉࢠͷࠨล͕ෳ਺ߦ ʹͳΔͱ͖͸\^ͰғΉ int[]  ages  =  new  int[]{22,  10,  19,  38};

      Arrays.stream(ages)      .forEach(n  -­‐>  {          String  s  =  n  +  "ࡀ";          System.out.println(s);      });  
  15. 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); ϝιουࢀর ϥϜμࣜͷ෦෼Λ ΦϒδΣΫτϝιου໊ Ϋϥεϝιου໊ ʹॻ͖׵͑ΒΕΔʢҾ਺΋ਪଌ͞ΕΔʣ
  16. ෭࡞༻͸ʢۃྗʣආ͚Δ 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ͱͯ͠ѻΘΕΔʣ
  17. ·ͱΊ Stream:  ίϨΫγϣϯతͳΦϒδΣΫτ΁ͷॱ࣍ɾฒྻ ॲཧΛύΠϓϥΠϯͰهड़Ͱ͖Δ   Lambda:  ؔ਺ܕΠϯλʔϑΣʔεͷ࣮૷ʢStream಺Ͱ
 ॲཧ͍ͤͨ͞಺༰ͳͲʣΛࣜ΍ϝιουࢀরͰॻ͚Δ   Stream

     API  /  LambdaΛ࢖͏͜ͱͰɺforจΛ࢖͏ॲཧ
 ΛΑΓ໌֬ʹɾ؆ૉʹॻ͚Δ   streamΛparallelԽ͢Δ͚ͩͰฒྻॲཧΛߦΘͤΔ͜ͱ ͕Ͱ͖ΔΑ͏ʹͳΔʢ෭࡞༻ͷ༗ແʹ஫ҙʣ