Stream
Streamã¯è¦ç´ ãå¿ è¦ã«ãªã£ãã¨ãã«ä½æãããList(ã¿ãããªã¢ã)ã§ãã
- è¦ç´ ã¯å¿
è¦ã«ãªã£ãã¨ãã«åãã¦ä½æãããã®ã§ã
- è¦ç´ ã®ä½æã«æéããããå ´åã«åæä½æã³ã¹ããæãããã¨ãã§ãã¾ãã
- ã¾ããè¦ç´ ãå ¨é¨è¾¿ããªãå ´åã«ç¡é§ãªä½æã³ã¹ãã忏ã§ãã¾ãã
- Javaã®InputStreamã¨ãã¨ã¯ä½ã®é¢ä¿ãããã¾ããã
ãµã³ãã«ã
println( "\n--- use range" ) // Streamã使ã£ã¦ä»»æã®ç¯å²ã®æ´æ°ãæã¤Listãä½ã颿° def rangeUseStream( last:Int ):Stream[Int] = { def next( current:Int):Stream[Int] = { println( "next :" + current ) // ãã¤å¼ã³åºãããããããããã« if (current == last) Stream.empty else Stream.cons(current, next(current+1)) } next( 0 ) } rangeUseStream(5).foreach( i => println(i) ) println( "\n--- use list" ) // Listã使ã£ã¦ä»»æã®ç¯å²ã®æ´æ°ãæã¤Listãä½ã颿° def rangeUseList( last:Int ):List[Int] = { def next( current:Int ):List[Int] = { println( "next :" + current ) // ãã¤å¼ã³åºãããããããããã« if (current == last) Nil else current :: next(current+1) } next( 0 ) } rangeUseList(5).foreach( i => println(i) )
å®è¡çµæã§ããStreamã使ã£ãæ¹ã¯è¦ç´ ãé 延使ããã¦ããã®ããããã¾ãã
--- use range next :0 0 next :1 1 next :2 2 next :3 3 next :4 4 next :5 --- use list next :0 next :1 next :2 next :3 next :4 next :5 0 1 2 3 4
ã¡ãªã¿ã«ãé·ããåå¾ããã¨ãã¹ã¦ã®è¦ç´ ã䏿°ã«ä½æããã¦ãã¾ãã¾ãã
println( rangeUseStream(5).length)
å®è¡çµæã§ãã
next :0 next :1 next :2 next :3 next :4 next :5 5
åä½ã¨ãã¦ã¯ç´å¾ã§ãã¾ããã使ãã¨ãã«ã¯æ°ãã¤ããªãã¨ã ãã ãªã