Объедините две переменные в одном запросе с помощью Rx - PullRequest
0 голосов
/ 08 мая 2020

Я хочу объединить переменные company и workFor в один поток, но не знаю как. Я пытался использовать switchMap, zip, merge и concatMapIterable, но ничего не помогло. Или я что-то сделал не так ..

Моя модель данных:

 data class UserCompany(
    @field:Json(name = "user") val user: User,
    @field:Json(name = "company") val company: Company,
    @field:Json(name = "workFor") val workFor: List<Company>
)

И мой текущий код:

    authApi.getCompany(getJwt()) //here I get data that looks like the above model
           .subscribeOn(Schedulers.io())
           .flatMapIterable { 
                return@flatMapIterable it.data.workFor.toMutableList().add(it.data.company) //error Type mismatch
           },

//should returns stream of company and workFor

Как объединить две переменные из одного запроса с помощью Rx ?

Редактировать, лучше пример. Допустим, у нас есть:

data class Pet(val name: String)

data class PetResult(
    val myPet: Pet, //dog
    val otherPet: List<Pet> //cat, bird, cow
)

И я хочу получить что-то вроде этого:

authApi.getPet() // response looks like PetResult (model above)
    .subscribeOn(Schedulers.io())
    .subscribe(
        { petList.setSuccess(it) }, // should returns dag, cat, bird, cow
        { petList.setError(it.message) }
    )

Итак, как объединить myPet с otherPet, полученным из одного запроса API?

1 Ответ

0 голосов
/ 08 мая 2020

Вы можете получить приведенный выше пример, как показано ниже:

    apiClient.getPet.flatMap {
        var getListResponse=it;  
        //From getListResponse you will get Result obj which contain pet and other pet list
        var pet=it.getPet()
        var petList=it.getPetList()
        petList.add(pet)
        getListResponse.setPetList=petList

    }
...