How to avoid nested Single in RxJava2

2019-08-23 15:39发布

问题:

I am fairly new in RxJava pradigm. I am doing following is leading to nested Single objects.

  tickHappened.map{
    func(it)
  }
  //I get Single<Single<ArrayList<String>>>

Here tickHappened:Single<T> and func<T>(T param):Single<ArrayList<String>>

  tickHappened.map{
    func(it)
  }
  //I get Single<Single<ArrayList<String>>>
   .map { single ->
            single.map { list ->
                list.size
            }
        }

I actually need to return Single<Int> which is the size of the Arraylist passed. I need to use map twice in the above chain which leads to Single<Single<Int>>

Is there a way to avoid nesting Singles? If I understand Rxjava, it doesn't make sense to have a Single which enclose another Single? If not, then is there a way to return Single<Int>?

回答1:

As a beginner, one thing to learn is the flatMap operator that is available all around RxJava and is the most common operator needed for solving problems:

tickHappened
    .flatMap { func(it) }
    .map { it.size() }