我们有个简单的方法来实现这个: s.print() 将会打印出stream里的所有元素。
用它们还能做什么?
另一个简便的功能是 Stream.range( min, max ) 函数。它会返回一个包含有从 min 到 max 的自然数的stream。
- var s = Stream.range( 10, 20 );
- s.print(); // prints the numbers from 10 to 20
在这个stream上,你可以使用 map, filter, 和 walk 等功能。 s.map( f ) 接受一个参数 f,它是一个函数, stream里的所有元素都将会被f处理一遍;它的返回值是经过这个函数处理过的stream。所以,举个例子,你可以用它来完成让你的 stream 里的数字翻倍的功能:
- function doubleNumber( x ) {
- return 2 * x;
- }
- var numbers = Stream.range( 10, 15 );
- numbers.print(); // prints 10, 11, 12, 13, 14, 15
- var doubles = numbers.map( doubleNumber );
- doubles.print(); // prints 20, 22, 24, 26, 28, 30
很酷,不是吗?相似的, s.filter( f ) 也接受一个参数f,是一个函数,stream里的所有元素都将经过这个函数处理;它的返回值也是个stream,但只包含能让f函数返回true的元素。所以,你可以用它来过滤到你的stream里某些特定的元素。让我们来用这个方法在之前的stream基础上构建一个只包含奇数的新stream:
- function checkIfOdd( x ) {
- if ( x % 2 == 0 ) {
- // even number
- return false;
- }
- else {
- // odd number
- return true;
- }
- }
- var numbers = Stream.range( 10, 15 );
- numbers.print(); // prints 10, 11, 12, 13, 14, 15
- var onlyOdds = numbers.filter( checkIfOdd );
- onlyOdds.print(); // prints 11, 13, 15
很有效,不是吗?最后的一个s.walk( f )方法,也是接受一个参数f,是一个函数,stream里的所有元素都要经过这个函数处理,但它并不会对这个stream做任何的影响。我们打印stream里所有元素的想法有了新的实现方法:
- function printItem( x ) {
- console.log( 'The element is: ' + x );
- }
- var numbers = Stream.range( 10, 12 );
- // prints:
- // The element is: 10
- // The element is: 11
- // The element is: 12
- numbers.walk( printItem );