Observable.create 对比 Observable.fromPublisher

Observable.create vs Observable.fromPublisher

我有两个函数分别使用 create() 和 fromPublisher:

       Observable.create<String> { emitter ->
            emitter.onNext("MindOrks")
            emitter.onComplete()
        }.map { s->
            System.out.println("map: "+s)
            s+s
        } .delay(2, TimeUnit.SECONDS)
          .subscribe {
                System.out.println("DelayExample"+ it)
            }

输出为:

   map: MindOrks

   DelayExampleMindOrksMindOrks

如果我使用代码怎么办:

          Observable.fromPublisher<String>{publisher->
            publisher.onNext("MindOrks")
            publisher.onComplete()
        }.map { s->{
            System.out.println("map")
            s+s
        } }.delay(2, TimeUnit.SECONDS)
          .subscribe {
                System.out.println("DelayExample"+ it)
            }

它returns:

  DelayExampleFunction0<java.lang.String>

我不明白为什么 return“DelayExampleFunction0”,并且从未调用过映射函数,谁能解释一下?

您在 map 函数中多了一对大括号“{}”:

map { s->
     {
      System.out.println("map")
      s+s
     }
}

所以在这种情况下,您返回的是 returns 字符串的函数。 将其更改为

.map { s ->
        System.out.println("map")
        s+s
}