user3239558
user3239558

Reputation: 1827

Observable.create vs Observable.fromPublisher

I have two function use create() and fromPublisher separately:

       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)
            }

The output is :

   map: MindOrks

   DelayExampleMindOrksMindOrks

How ever if I use code:

          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)
            }

It returns:

  DelayExampleFunction0<java.lang.String>

I don't understand why return "DelayExampleFunction0<java.lang.String>", and map function is never called , can anyone explain it ?

Upvotes: 0

Views: 123

Answers (1)

mtw
mtw

Reputation: 144

You have an additional pair of braces "{}" in map function:

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

So in this case you're returning function, which returns string. Change this to

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

Upvotes: 1

Related Questions