Java 8 Stream APIã¯ãšãŠãããšãã«ã®ãã·ã¥ãã§ããïŒ ã³ã¬ã¯ã·ã§ã³ã®è€éãªæäœã®åŠçãåçŽã§ç解å¯èœãªã³ãŒãã«ãå€ãããããšã¯å¯èœã§ããïŒ äžŠåæäœã®å©ç¹ã¯ã©ãã«ããããã€åæ¢ããã®ã§ããïŒ ãããã¯ãèªè
ãééããå€ãã®è³ªåã®äžéšã§ãã @irnyãšãåŒã°ããTagir Valeevã䜿çšããŠãStream APIã®èœãšãç©Žãç解ããŠã¿ãŸãããã å€ãã®èªè
ã¯ãäŒè°ã§ã®èšäºãJavaã®ç 究ãããã³è¡šçŸåè±ããªã¬ããŒãã«ã€ããŠã®å¯Ÿè©±è
ã«ãã§ã«ç²ŸéããŠããŸãã ã§ããããé
æ»ãªããè°è«ãå§ããŸãã
-TagirãStackOverflowãªãœãŒã¹ã®ããã©ãŒãã³ã¹ãåªããŠããŸãïŒ java-streamãã©ã³ãã®ãŽãŒã«ãã¹ããŒã¿ã¹ ïŒã Java 8 Stream APIã䜿çšãããã€ããã¯ã¹ãšèšèšã®è€éããïŒãã®ãªãœãŒã¹ã«é¢ãã質åãšåçã«åºã¥ããŠïŒå€§ãããªã£ããšæããŸããïŒ -確ãã«ããã€ãŠStackOverflowã«å€ãã®æéãè²»ãããStream APIã®åé¡ãåžžã«ç£èŠããŠããŸããã ç§ã®æèŠã§ã¯ãæãèå³æ·±ã質åãžã®çãããã§ã«ããã®ã§ãç§ã¯å®æçã«èª¿ã¹ãŸãã ãã¡ããã人ã
ã¯Stream APIãè©ŠããŠã¿ãããã«æããŸãããè©ŠããŠã¿ãªããšããããã§ãããã ãã®ãããã¯ã«é¢ããæåã®è³ªåã¯ã人ã
ãåæãã«ããå®éšããJava 8ããªãªãŒã¹ãããåããçŸããŠããŸããã å
šçæã¯2014幎ãš2015幎ã®çµããã«æ¥ãŸããã
å€ãã®èå³æ·±ã質åã¯ãStream APIã§ã§ããããšã ãã§ãªãããµãŒãããŒãã£ã®ã©ã€ãã©ãªãªãã§ã¯éåžžã§ããªãããšã«ãé¢é£ããŠããŸãã ãŠãŒã¶ãŒã¯ãåžžã«è³ªåãšè°è«ãéããªãããStream APIã®ç¯å²ãæ¡å€§ããããšããŸããã ãããã®è³ªåã®ããã€ãã¯ãJava 8 Stream APIã®æ©èœãæ¡åŒµããStreamExã©ã€ãã©ãªã®ã¢ã€ãã¢ã®æºã«ãªã£ãŠããŸãã
-StreamExã«èšåããŸããã åµäœã®ãã£ãããæããŠãã ããã ããªãã®ç®æšã¯äœã§ããïŒ-åæ©ã¯çŽç²ã«å®çšçã§ããã ä»äºã§Java 8ã«åãæ¿ãããšããçŸãããšäŸ¿å©ãããã®æåã®é¶é
æã¯ããã«äžé£ã®æ
è¡ã«çœ®ãæããããŸãããç§ã¯ãå®è¡ãã¹ãStream APIã§ç¹å®ã®ããšããããã£ãã®ã§ãããããŸããããŸããã§ããã ã³ãŒããé·ãããããä»æ§ããéžè±ããå¿
èŠããããŸããã ãããã®åé¡ã解決ããããã«ãäœæ¥äžã®ãããžã§ã¯ãã«è£å©ã¯ã©ã¹ãšè£å©ã¡ãœãããè¿œå ãå§ããŸããããèŠèŠãããªããŸããã ãã®åŸãã¯ã©ã¹ã§æšæºã¹ããªãŒã ãã©ãããããšãå€ãã®è¿œå æäœãæäŸãããäœæ¥ããã£ãšæ¥œãããªããŸããã ãããã®ã¯ã©ã¹ãå¥ã®ãªãŒãã³ãããžã§ã¯ãã§éžæããéçºãéå§ããŸããã
-
ããªãã®æèŠã§ã¯ãã©ã®ãããªçš®é¡ã®èšç®ãšæäœãããã³ã©ã®ããŒã¿ã«Stream APIã䜿çšããŠå®è£
ãã䟡å€ããããŸããããŸããåŠçã«ããŸãé©ããªããã®ã¯äœã§ããã-ã¹ããªãŒã APIã¯äžå€ããŒã¿ã倧奜ãã§ãã æ°ããããŒã¿æ§é ãäœæããã®ã§ã¯ãªããæ¢åã®ããŒã¿æ§é ãå€æŽããå Žåã¯ãå¥ã®ãã®ãå¿
èŠã§ãã æ°ããæšæºã¡ãœããïŒList.replaceAllãªã©ïŒã«æ³šç®ããŠãã ããã
ã¹ããªãŒã APIã¯ç¬ç«ããããŒã¿ã倧奜ãã§ãã å
¥åã»ããã®è€æ°ã®èŠçŽ ãåæã«äœ¿çšããå¿
èŠãããå ŽåããµãŒãããŒãã£ã®ã©ã€ãã©ãªããªããšéåžžã«äžæ Œå¥œã«ãªããŸãã ããããStreamExã®ãããªã©ã€ãã©ãªã¯ãå€ãã®å Žåããã®åé¡ã解決ããŸãã
ã¹ããªãŒã APIã¯ããã¹ããšã«1ã€ã®åé¡ã解決ããã®ã奜ãã§ãã 1åã®ããŒã¿ã©ãŠã³ãã§ããã€ãã®ç°ãªãåé¡ã解決ããå Žåã¯ãç¬èªã®ã³ã¬ã¯ã¿ãŒãäœæããæºåãããŠãã ããã ãããŠãããããŸã£ããããŸããããšããäºå®ã§ã¯ãããŸããã
ã¹ããªãŒã APIã¯ããã§ãã¯ãããäŸå€ã奜ã¿ãŸããã Stream APIãªãã¬ãŒã·ã§ã³ããããããã¹ããŒããããšã¯ããŸã䟿å©ã§ã¯ãããŸããã ç¹°ãè¿ãã«ãªããŸããããããç°¡åã«ããããšããã©ã€ãã©ãªãŒïŒããšãã°
jOOλ ïŒããããŸããããã§ãã¯æžã¿ã®äŸå€ãæŸæ£ããããšããå§ãããŸãã
æšæºã®Stream APIã«ã¯ãéåžžã«å¿
èŠãªæäœãããã€ããããŸããã ããšãã°ãtakeWhileã¯Java 9ã§ã®ã¿è¡šç€ºãããŸããéåžžã«åççã§è€éã§ãªããã®ãå¿
èŠãªå ŽåããããŸããããããè¡ãããšã¯ã§ããŸããã ç¹°ãè¿ããŸãããjOOλãStreamExã®ãããªã©ã€ãã©ãªããããã®åé¡ã®ã»ãšãã©ã解決ããããšã¯æ³šç®ã«å€ããŸãã
-
åžžã«parallelStreamã䜿çšããã®ãçã«ããªã£ãŠãããšæããŸããïŒ ã¡ãœãããã¹ããªãŒã ããparallelStreamã«ãåãæ¿ããããšãã«çºçããå¯èœæ§ã®ããåé¡ã¯äœã§ããïŒ-ã©ã®ãããªå Žåã§ããåžžã«parallelStreamã䜿çšããªãã§ãã ããã éåžžã«ãŸãã«ãã䜿çšããããããã«ã¯ååãªçç±ãããã¯ãã§ãã
ãŸããStream APIã䜿çšããŠè§£æ±ºãããã¿ã¹ã¯ã®ã»ãšãã©ã¯ãForkJoinPoolã®ã¿ã¹ã¯ãåæ£ããŠåæãããªãŒããŒãããã«æ¯ã¹ãŠéãããŸãã Doug Leaã®æåãªèšäºã
ãã€ãã©ã¬ã«ã¹ããªãŒã ã䜿çšããã ãã¯çµéšåã§ããçŸä»£ã®ãã·ã³ã§ã¯ãéåžžãå®è¡æéã100ãã€ã¯ãç§ãè¶
ããã¿ã¹ã¯ããã©ã¬ã«åããã®ãçã«ããªã£ãŠããŸãã ç§ã®ãã¹ãã§ã¯ã䞊ååã«ãã£ãŠ20ãã€ã¯ãç§ã®ã¿ã¹ã¯ãå éãããããšããããŸãããããã¯ãã§ã«å€ãã®èŠå ã«äŸåããŠããŸãã
第äºã«ãã¿ã¹ã¯ãé·æéå®è¡ããããšããŠãã䞊ååŠçããããå éãããšããäºå®ã§ã¯ãããŸããã ããã¯ããœãŒã¹ã®å質ãäžéæäœïŒããšãã°ãé åºä»ããããã¹ããªãŒã ã®å¶éãé·æéã«ããã£ãŠæ©èœããïŒãããã³ç«¯æ«æäœïŒããšãã°ãforEachOrderedã䞊è¡æ§ã®å©ç¹ãç¡å¹ã«ããå ŽåãããïŒã«äŸåããŸãã æé©ãªäžéæäœã¯ã¹ããŒãã¬ã¹æäœïŒãã£ã«ã¿ãŒãããããflatMapãããã³ããŒã¯ïŒã§ãããæé©ãªæçµæäœã¯ãªãã¥ãŒã¹/ã³ã¬ã¯ããã¡ããªãŒã§ããããã¯é£æ³çã§ããã€ãŸããã¿ã¹ã¯ãå¹ççã«ãµãã¿ã¹ã¯ã«åå²ããçµæãçµåã§ããŸãã ãŸããããŒãžæé ãæé©ã§ãªãå ŽåããããŸãïŒããšãã°ãè€éãªgroupingByãã§ãŒã³ã®å ŽåïŒã
第äžã«ãå€ãã®äººã
ãStream APIã誀ã£ãŠäœ¿çšããä»æ§ã«éåããŠããŸãã ããšãã°ãã¹ããŒããã«ç¶æ
ã®ã©ã ãããã£ã«ã¿ãŒãããããªã©ã®æäœã«æž¡ããŸãã ãŸãã¯ãreduceã®ãŠãããèŠä»¶ãšçµåæ§ã«éåããŠããŸãã ééã£ãã³ã¬ã¯ã¿ãŒãããã€æžããŠãããã¯èšããŸã§ããããŸããã ããã¯å€ãã®å Žåãé£ç¶ããã¹ããªãŒã ã§ã¯èš±ãããŸããã䞊åã¹ããªãŒã ã§ã¯å®å
šã«åãå
¥ããããŸããã ãã¡ãããããã¯ééã£ãŠèšè¿°ããçç±ã§ã¯ãããŸããããäºå®ã¯æããã§ãããã©ã¬ã«ã¹ããªãŒã ã䜿çšããããšã¯ããé£ãããåã«ã©ããã«parallelïŒïŒãè¿œå ããã ãã§ã¯ãããŸããã
ãããŠæåŸã«ãã¹ããªãŒã ãé·æéå®è¡ãããŠããŠãããã®äžã®æäœã¯ç°¡åã«äžŠååã§ãããã¹ãŠãæ£ããå®è¡ããŠããŸããããã»ããµã³ã¢ãå®éã«ã¢ã€ãã«ç¶æ
ã§ãããã©ãããæ€èšãã䟡å€ããããŸãã ãªã¯ãšã¹ããåžžã«ããŒããããWebãµãŒãã¹ãããå Žåãåãªã¯ãšã¹ããåå¥ã®ã¹ã¬ããã§åŠçããæ¹ãåççã§ããå¯èœæ§ãéåžžã«é«ããªããŸãã å€æ°ã®ã³ã¢ãããå ŽåããŸãã¯ã·ã¹ãã ãå®å
šã«ããŒããããŠããªãå Žåã«ã®ã¿ããã©ã¬ã«ã¹ããªãŒã ã«ã€ããŠèããããšãã§ããŸãã ããããã䞊åã¹ããªãŒã ãå¶éããããã«java.util.concurrent.ForkJoinPool.common.parallelismãã€ã³ã¹ããŒã«ãã䟡å€ããããããããŸããã
ããšãã°ãã³ã¢ã16åãããéåžž12åãããŒããããŠããå Žåãæ®ãã®ã³ã¢ãã¹ããªãŒã ã§å æããããã«äžŠå床ã¬ãã«4ãèšå®ããŠã¿ãŠãã ããã ãã¡ãããäžè¬çãªãã³ãã¯ãããŸãããåžžã«ç¢ºèªããå¿
èŠããããŸãã
-
䞊ååã®è°è«ãç¶ãããšãããã©ãŒãã³ã¹ã¯ããŒã¿ã®éãšæ§é ãããã»ããµã³ã¢ã®æ°ã«åœ±é¿ããããšèšãããšã¯ã§ããŸããïŒ ã©ã®ããŒã¿ãœãŒã¹ïŒLinkedListãªã©ïŒã䞊ååŠçããã¹ãã§ã¯ãããŸãããïŒ-LinkedListã¯ãŸã ææªã®ãœãŒã¹ã§ã¯ãããŸããã å°ãªããšã圌ã¯èªåã®ãµã€ãºãç¥ã£ãŠããã®ã§ãStream APIã¯ã¿ã¹ã¯ãããããŸãåå²ã§ããŸãã ææªãªã®ã¯ã䞊ååŠçã®ããã«ãæ¬è³ªçã«äžè²«æ§ã®ãããœãŒã¹ïŒLinkedListãªã©ïŒã§ããµã€ãºãå ±åããªããœãŒã¹ã§ãã éåžžãããã¯Spliterators.spliteratorUnknownSizeïŒïŒãéããŠããŸãã¯ãµã€ãºãæå®ããã«AbstractSpliteratorãéããŠäœæãããŸãã JDKã®äŸã¯ãStream.iterateïŒïŒãFiles.listïŒïŒãFiles.walkïŒïŒãBufferedReader.linesïŒïŒãPattern.splitAsStreamïŒïŒãªã©ã§ãã ãã®ç¹ã«ã€ããŠã¯ãä»å¹Žã®JPointã«é¢ããStreamPoint Odditiesã¬ããŒãã§èª¬æããŸããã å®è£
ãéåžžã«æªããããããšãã°ããã®ãœãŒã¹ã«å«ãŸããèŠçŽ ã1024å以äžã®å ŽåããŸã£ãã䞊åããªããšããäºå®ã«ã€ãªãããŸãã ãããŠãããã§ãããªãã²ã©ã䌌ãŠããŸãã å€ããå°ãªããéåžžã®äžŠååŠçãè¡ãã«ã¯ãäœäžãã®èŠçŽ ãå¿
èŠã§ãã StreamExã®å®è£
ã¯æ¹åãããŠããŸãã ããšãã°ãStreamEx.ofLinesïŒãªãŒããŒïŒïŒBufferedReader.linesïŒïŒã®é¡äŒŒç©ïŒã¯ãå°ããªãã¡ã€ã«ã§ãååã«äžŠåããŸãã æªããœãŒã¹ããããããã䞊ååããå Žåãæåã«é çªã«ãªã¹ãã«åéããæ¹ãå¹ççã§ãïŒããšãã°ãStream.iterateïŒ...ïŒ.collectïŒtoListïŒïŒïŒãParallelStreamïŒïŒ...ïŒ
ã»ãšãã©ã®æšæºJDKããŒã¿æ§é ã¯åªãããœãŒã¹ã§ãã Java 7ãšäºææ§ã®ãããµãŒãããŒãã£ã©ã€ãã©ãªã®æ§é ãšã©ãããŒã«æ³šæããŠãã ãããSpliteratorïŒïŒã¡ãœããããªãŒããŒã©ã€ãã§ããªãããïŒJava 7ã«ã¯ã¹ããªãã¿ããªãããïŒãCollection.spliteratorïŒïŒãŸãã¯List.spliteratorïŒïŒã®å®è£
ã䜿çšããŸããããã©ã«ãã§ã¯ããã¡ãããããŒã¿æ§é ã«ã€ããŠäœãç¥ãããåçŽã«ã€ãã¬ãŒã¿ãã©ãããããããããŸã䞊åããŸããã 9ã§ã¯ããã
ã¯ã©ã³ãã ã¢ã¯ã»ã¹ãªã¹ãã§
æ¹åãããŸãã
-
äžéæäœã䜿çšããå Žåãããªãã®æèŠã§ã¯ãStream ãã€ãã©ã€ã³ã® ãããå€ã¯ã©ã®ãããªãã®ã§ã ã©ã®ããã«æ±ºå®ãããŸããïŒ å¶éïŒæ瀺çããã³æé»çïŒã¯ãããŸããïŒ-å³ããå¶éããããšã¯èšããŸããã ã»ãšãã©ã®äžéStream APIæäœã¯ã1åã®åŒã³åºãã§ã¹ã¿ãã¯ã®æ·±ããå¢ãããŸãã äžæ¹ã§ãããã¯ã€ã³ã©ã€ã³åã®å¹çãäœäžãããå¯èœæ§ããããŸãïŒHotSport JVMã®ããã©ã«ãã§ã¯MaxInlineLevel = 9ïŒã ããããéåžžãããã¯å€ç«ãããã³ãããŒã¯ã§ã®ã¿åœ¹å²ãæãããŸãã å®éã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãåŒã³åºãã¯äŸç¶ãšããŠå€æ
çã§ãããã€ã³ã©ã€ã³åãæ倧éã«æŽ»çšã§ããŸããã é·ãã¹ã¿ãã¯ãã¬ãŒã¹ã¯ããã°ãè©°ãŸãããããäŸå€ãªããžã§ã¯ãã®äœæãé
ãããããåå¿è
ãæããããã ãã§ãã ããããäžè¬çã«ããããã¯ç¡å®³ã§ãã æ¬åœã«å¿
èŠãªå Žåã¯ãæ°åã®äžéæäœãå®è¡ããŠãåé¡ãããŸããã ãã¡ãããäŸãã°whileïŒäœãïŒstream = stream.mapïŒx-> ...ïŒã«ãŒãã®ããã«ãå¶åŸ¡äžèœã«ã¹ããªãŒã ãå¢ããã¹ãã§ã¯ãããŸããã ã¿ãŒããã«æäœã®åŸç¶ã®å®è¡ã«ã¯ãStackOverflowErrorããèœã¡ããªã¹ã¯ããããŸãã
åŠçäžã«ã³ã¬ã¯ã·ã§ã³ãæŽçããæ¹æ³ïŒäžéã®äžŠã¹æ¿ãïŒïŒæäœïŒãŸãã¯é åºä»ããããããŒã¿ãœãŒã¹ã䜿çšãããããããã£ã«ã¿ãŒãããã³æäœã®åæžã䜿çšããŠãããæäœããæ¹æ³ã¯ãããã©ãŒãã³ã¹ã®åäžã«ã€ãªãããŸããïŒããããã»ãšãã©ã å
¥åããœãŒãããããšããäºå®ãå©çšããã®ã¯ãdistinctïŒïŒæäœã®ã¿ã§ãã ã¢ã«ãŽãªãºã ãå€æŽããèŠçŽ ãåã®èŠçŽ ãšæ¯èŒããŸãããœãŒãããã«HashSetãä¿æããå¿
èŠããããŸãã ãã ãããã®ããã«ããœãŒã¹ã¯ãœãŒããããŠããããšãå ±åããå¿
èŠããããŸãã JDKããã®ãã¹ãŠã®ãœãŒãããããœãŒã¹ïŒBitSetãTreeSetãIntStream.rangeïŒã«ã¯ãã§ã«äžæã®èŠçŽ ãå«ãŸããŠãããããdistinctïŒïŒã¯åœ¹ã«ç«ããªãã çè«çã«ã¯ãã»ããã®ååãtrueã§åŸåãfalseã®å Žåãããã»ããµã§ã®åå²äºæž¬ãåªããŠããããããã£ã«ã¿ãŒæäœã¯äœãã«åã€ããšãã§ããŸãã ãã ããããŒã¿ãæ¢ã«è¿°èªã§ãœãŒããããŠããå Žåã¯ãStream APIã䜿çšããããã€ããªæ€çŽ¢ã䜿çšããŠå¢çç·ãèŠã€ããæ¹ãå¹ççã§ãã ããã«ãå
¥åããŒã¿ã®ãœãŒããäžååãªå ŽåããœãŒãèªäœãé
ããªããŸãã ãããã£ãŠããœãŒãïŒïŒã®å Žåãã©ã³ãã ããŒã¿ã®DistinctïŒïŒã¯ãdistinctïŒïŒèªäœãé«éåãããŸãããdistinctïŒïŒãããäœéã«ãªããŸãã
-
ã³ãŒãã®ãããã°ã«é¢é£ããéèŠãªåé¡ãæèµ·ããå¿
èŠã
ãããŸãã peekïŒïŒã¡ãœããã䜿çšããŠäžéçµæãååŸããŸããïŒ ç¬èªã®ãã¹ãã®ç§å¯ãæã£ãŠããå¯èœæ§ã¯ãããŸããïŒ ããããèªè
ãšå
±æããŠãã ããã-äœããã®çç±ã§ããããã°ã«peekïŒïŒã䜿çšããŸããã ã¹ããªãŒã ãéåžžã«è€éã§ãããã»ã¹ã§äžå¯è§£ãªããšãçºçããå Žåããããè€æ°ã®ïŒäžéãªã¹ãã䜿çšããŠïŒåå²ããŠããã®ãªã¹ãã確èªã§ããŸãã äžè¬ã«ãIDEã®éåžžã®ã¹ããããã€ã¹ããããããã¬ãŒã§ã¹ããªãŒã ããã€ãã¹ããããšã«æ
£ããããšãã§ããŸãã æåã¯æãã§ãããããã«æ
£ããŸãã
æ°ããã¹ããªãã¿ãŒãšã³ã¬ã¯ã¿ãŒãéçºãããšããå
æ¬çãªãã¹ããããŸããŸãªäžå€æ¡ä»¶ã®ãã§ãã¯ãç°ãªãæ¡ä»¶äžã§ã®èµ·åãè¡ããã¹ãã§è£å©ã¡ãœããã䜿çšããŸãã ãã©ã¬ã«ã¹ããªãŒã ãšã·ãªã¢ã«ã¹ããªãŒã ã®çµæãåãã§ããããšãæ¯èŒããã ãã§ãªãããã©ã¬ã«ã¹ããªãŒã ã«äººå·¥ã¹ããªãã¿ãŒãæ¿å
¥ã§ããŸããããã«ããããã©ã¬ã«ã¿ã¹ã¯ãäœæãããšãã«ç©ºã®ãã©ã°ã¡ã³ããçæãããŸãã çµæã«åœ±é¿ãäžããŠã¯ãªãããéèŠãªãã°ãèŠã€ããã®ã«åœ¹ç«ã€ã¯ãã§ãã ãŸãã¯ãã¹ããªãã¿ãŒããã¹ããããšããããããã©ã³ãã ã«ïŒãã ãåãã¹ã¬ããã§ïŒå®è¡ãããµãã¿ã¹ã¯ã«ã©ã³ãã ã«åå²ããçµæãé 次ã®ãã®ãšæ¯èŒããŸãã ããã¯å®å®ããåçŸå¯èœãªãã¹ãã§ãããã·ã³ã°ã«ã¹ã¬ããã§ããã䞊åã¹ããªãã¿ãŒã§ã»ãšãã©ã®ãšã©ãŒããã£ããã§ããŸãã äžè¬ã«ããã¹ãŠã®ã³ãŒããããã¯ãå
æ¬çã«ãã§ãã¯ãããšã©ãŒãçºçããå Žåã«å¥å
šãªã¬ããŒããçºè¡ããã¯ãŒã«ãªãã¹ãã·ã¹ãã ã¯ãéåžžãããã°ãå®å
šã«çœ®ãæããŸãã
-
ä»åŸãStream APIã®ã©ã®ãããªéçºãèŠãããŸããïŒ-é£ãã質åã§ããå°æ¥ãäºæž¬ããæ¹æ³ãããããŸããã çŸåšãå€ãã¯4ã€ã®Stream APIã®ç¹æ®åïŒStreamãIntStreamãLongStreamãDoubleStreamïŒã®ååšã«äŸåããŠãããããå€ãã®ã³ãŒãã4åè€è£œããå¿
èŠããããŸãã 誰ãããžã§ããªãã¯ã¹ãã·ã£ã©ã€ãŒãŒã·ã§ã³ã楜ãã¿ã«ããŠããŸãããžã§ããªãã¯ã¹ãã·ã£ã©ã€ãŒãŒã·ã§ã³ã¯Java 10ã§å®æããå¯èœæ§ããããŸããããããã°ç°¡åã«ãªããŸãã
Stream APIæ¡åŒµæ©èœã«ãåé¡ããããŸãã ãåãã®ããã«ãStreamã¯ã€ã³ã¿ãŒãã§ã€ã¹ã§ãããäœããã®æçµã¯ã©ã¹ã§ã¯ãããŸããã äžæ¹ã§ãããã«ããããµãŒãããŒãã£ã®éçºè
ãStream APIãæ¡åŒµã§ããŸãã äžæ¹ãStream APIã«æ°ããã¡ãœãããè¿œå ããã®ã¯ããã»ã©ç°¡åã§ã¯ãããŸãããJava8ã§ãã®ã€ã³ã¿ãŒãã§ãŒã¹ãæ¢ã«å®è£
ããŠãããã¹ãŠã®ã¯ã©ã¹ãå£ãå¿
èŠã¯ãããŸããã æ°ããã¡ãœããã¯ãããããæ¢åã®ã¡ãœããã®èŠ³ç¹ããè¡šãããããã©ã«ãã®å®è£
ãæäŸããå¿
èŠããããŸãããããã¯åžžã«å¯èœã§ç°¡åã§ã¯ãããŸããã ãããã£ãŠãæ©èœã®ççºçãªæé·ã¯ã»ãšãã©æåŸ
ã§ããŸããã
Java 9ã§è¡šç€ºãããæãéèŠãªããšã¯ãtakeWhileããã³dropWhileã¡ãœããã§ãã Stream.ofNullableãOptional.streamã®3ã€ã®åŒæ°ãšããã€ãã®æ°ããã³ã¬ã¯ã¿ãŒ-flatMappingãfilteringã§å埩ããå°ããªæ¥œãããã®ããããŸãã ããããå
šäœãšããŠããŸã å€ããèŠèœãšãããŸãã ããããJDKã«ã¯ã¹ããªãŒã ãäœæããè¿œå ã®ã¡ãœããããããŸããæ°ããAPIã¯çŸåšã¹ããªãŒã ã«æ³šç®ããŠéçºãããŠãããå€ãAPIã¯åŒ·åãããŠããŸãã
-
å€ãã®äººãã2015幎ã®ã¹ããŒãããç§ãã¡ã¯äœã枬å®ããŠããã®ã§ããïŒããšããã¬ããŒãã§æãåºããŸããã ä»å¹Žã¯æ°ãããžã§ãŒã«ãŒã®ããŒããèšç»ããŠããŸããïŒ ããã¯ã©ããªãã®ã§ããããïŒ-æ°ããã¬ããŒããäœæããããšã«ããŸãããããStream API Fadsããšã¯ããŸãåµé çã§ã¯ãããŸããã ããã¯ãããæå³ã§ãJPointã®ã¬ããŒããã¹ããªãŒã APIã®å¥ç°ãã®ç¶ãã§ããJava9ã§ä¿®æ£ããããã®ã«çŠç¹ãåœãŠãŠãã¹ããªãŒã APIã®äºæããªãããã©ãŒãã³ã¹å¹æãšæ»ããããã¹ãããã«ã€ããŠèª¬æããŸãã
-
èå³æ·±ãã詳现ãªåçãããããšãããããŸãã æ°ããããã©ãŒãã³ã¹ã楜ãã¿ã«ããŠããŸãã
Joker 2016ã«ã³ãã¡ã¬ã³ã¹ã§ã¯ãStream APIããã³ãã®ä»ã®JavaããŒãã³ã¢ã®äžçã«è§Šããããšãã§ããŸãã è¬æŒè
ãžã®è³ªåãã¬ããŒãã«é¢ããè°è«ãç¡éã®ãããã¯ãŒãã³ã°ããããŸãã