[RxJS] map vs flatMap

What‘s the difference between map and flatmap? First, let‘s show what map is. To show that, I need a source stream, so I‘m going to make an interval. It takes a tenth of a second, and I‘m only going to take 10 values, and subscribe to it.

var source = Rx.Observable.interval(100).take(10).map((x) => x*2);
console.clear();
source.subscribe(function(res){
  console.log(res);
});

/*
0
2
4
6
8
10
12
14
16
18
*/

But what happens if I want to do something asynchronous in here? To show this, I‘m going to return an observable timer, which is just going to wait for half of a second, and then map to exactly the same values.

var source =
    Rx.Observable.interval(100).take(10)
    .map(function(x){
      return Rx.Observable.timer(100).map(function(){
        return x;
      });
    });
console.clear();
source.subscribe(function(res){
  console.log(res.toString());
});

/*
"[object Object]"
"[object Object]"
"[object Object]"
"[object Object]"
"[object Object]"
"[object Object]"
"[object Object]"
"[object Object]"
"[object Object]"
"[object Object]"
*/

‘Rx.Observable.timer(100)‘ causes it delay 100 ms.

You find You‘re going to get objects back. That‘s because these objects are observables. I‘d really, really like to get my values back into my stream. There‘s actually two ways to do this.

First Way: mergerAll()

What a merge all does is, it takes in a stream of observables, or an observable of observables, and merges them together as they come in.

It subscribes to each one, and pumps them into one output stream.

var source =
    Rx.Observable.interval(100).take(10)
    .map(function(x){
      return Rx.Observable.timer(100).map(function(){
        return x;
      });
    }).mergeAll();
console.clear();
source.subscribe(function(res){
  console.log(res.toString());
});

/*
"0"
"1"
"2"
"3"
"4"
"5"
"6"
"7"
"8"
"9"
*/

Second way: flatMap()

What flatmap is going to do is it‘s going to perform this mapping function and then subscribe to each observable returned by the map.

var source =
    Rx.Observable.interval(100).take(10)
    .flatMap(function(x){
      return Rx.Observable.timer(100).map(function(){
        return x;
      });
    });
console.clear();
source.subscribe(function(res){
  console.log(res.toString());
});
时间: 2024-11-15 23:31:55

[RxJS] map vs flatMap的相关文章

Spark 中 map 与 flatMap 的区别

通过一个实验来看Spark 中 map 与 flatMap 的区别. 步骤一:将测试数据放到hdfs上面 hadoopdfs -put data1/test1.txt /tmp/test1.txt 该测试数据有两行文本: 步骤二:在Spark中创建一个RDD来读取hdfs文件/tmp/test1.txt 步骤三:查看map函数的返回值 得到map函数返回的RDD: 查看map函数的返回值--文件中的每一行数据返回了一个数组对象 步骤四:查看flatMap函数的返回值 得到flatMap函数返回的

spark 的一些常用函数 filter,map,flatMap,lookup ,reduce,groupByKey

定义不带参数也不带返回值的函数(def :定义函数的关键字  printz:方法名称) scala> def printz = print("scala hello") 定义带参数也带返回值的函数(这种函数在定义时也可以不带返回值的类型,scala会自动推算出.建议还是带上) scala> def minNum(x:Int,y:Int):Int = if(x>y) x else y //:Int 是该函数的返回值类型 minNum: (x: Int, y: Int)I

scala 88 for替换map,flatmap,filtermap,for,scala,flatmap

王家林亲授<DT大数据梦工厂>大数据实战视频“Scala深入浅出实战经典”视频.音频和PPT下载!第88讲:Scala中使用For表达式实现map.flatMap.filter百度云盘:http://pan.baidu.com/s/1mgtgcIG360云盘:http://yunpan.cn/cdXsbctXfDNyC 访问密码 4e30腾讯微云:http://url.cn/VjOGea本节王老师讲了for可以替换map,flatmap,和filter.def map[A,B](list:Li

scala map和flatMap

map和flatMap scala> val a = Seq(1,2,3,6,4) a: Seq[Int] = List(1, 2, 3, 6, 4) scala> val b = a.flatMap(f=>{ | try{ | Some(f/(f-1)) | }catch{ | case e:Exception=>None | } | }) b: Seq[Int] = List(2, 1, 1, 1) scala> val b = a.map(f=>{ | try{

理解Swift中map 和 flatMap对集合的作用

map和flatMap是函数式编程中常见的概念,python等语言中都有.借助于 map和flapMap 函数可以非常轻易地将数组转换成另外一个新数组. map函数可以被数组调用,它接受一个闭包作为參数,作用于数组中的每一个元素.闭包返回一个变换后的元素.接着将全部这些变换后的元素组成一个新的数组. 简单的说. map就是映射函数,把一个集合映射成还有一个集合. Swift的flatMap不easy理解,flatMap非常像map函数,可是它摒弃了那些值为nil的元素. flatMap是在处理一

第88讲:Scala中使用For表达式实现map、flatMap、filter

今天我们来学习一下如何使用for表达式实现map.flatMap以及filter 首先,我们来看下map.map的功能是,传入一个list,通过一个函数f,将list中的元素A变成元素B的过程.最后得到由B形成的列表.这个过程如果由for循环实现的话,如下操作: for(element <- list) yield f(element) 接下来我们看下flatMap.flatMap的功能是,传入一个list,通过一个函数f,将list中的每个元素转换成一个列表,最后返回由这些列表中的所有元素构成

Scala深入浅出实战经典《第88讲:Scala中使用For表达式实现map、flatMap、filter》笔记

简直了....晚上回来突然看到了进巨的原稿,忍不住撸了幅三爷,然后什么都没做就23点了... 第88讲:Scala中使用For表达式实现map.flatMap.filter Goal: For表达式实现map/flatMap/filter Gains: map/flatMap/filter是泛型 More: ...... ------------------------------------------------------------------------------------ 信息来

Scala中使用For表达式实现map、flatMap、filter

学习了Scala中使用For表达式实现map.flatMap.filter,可以实现广泛的应用 例子如下: Object For_Advancde { Def main(args: Array[String]) {} Def map[A,B](List: List[A], f:A=>B):List[B]= For (element <-list) yield f(element) Def flatmap[A,B](List: List[A], f:A=>B):List[B]= For (

(转)scala学习笔记(8): 列表的map,flatMap,zip和reduce

http://www.ituring.com.cn/article/131442 https://twitter.github.io/scala_school/zh_cn/collections.html#flatten 如果不了解map,flatMap,zip和reduce函数,你就不能真正地谈论scala.通过这些函数,我们可以非常容易地处理列表的内容并结合Option对象工作.你可以在这个站点找到更多的片段:Scala片段 1:FoldingScala 片段2:List的操作符魔法 让我们