请注意,如果你在一个无限大的stream上使用 s.print(),它会无休无止的打印下去,最终耗尽你的内存。所以,你最好在使用s.print()前先s.take( n )。在一个无穷大的stream上使用s.length()也是无意义的,所有,不要做这些操作;它会导致一个无尽的循环(试图到达一个无尽的stream的尽头)。但是对于无穷大stream,你可以使用s.map( f ) 和 s.filter( f )。然而,s.walk( f )对于无穷大stream也是不好用。所有,有些事情你要记住; 对于无穷大的stream,一定要使用s.take( n )取出有限的部分。
让我们看看能不能做一些更有趣的事情。还有一个有趣的能创建包含自然数的stream方式:
- function ones() {
- return new Stream( 1, ones );
- }
- function naturalNumbers() {
- return new Stream(
- // the natural numbers are the stream whose first element is 1...
- 1,
- function () {
- // and the rest are the natural numbers all incremented by one
- // which is obtained by adding the stream of natural numbers...
- // 1, 2, 3, 4, 5, ...
- // to the infinite stream of ones...
- // 1, 1, 1, 1, 1, ...
- // yielding...
- // 2, 3, 4, 5, 6, ...
- // which indeed are the REST of the natural numbers after one
- return ones().add( naturalNumbers() );
- }
- );
- }
- naturalNumbers().take( 5 ).print(); // prints 1, 2, 3, 4, 5