Dr.KeyOk
Dr.KeyOk

Reputation: 778

How to get list from List<Pair> in Android

In my application I want combine two deferent lists and for this I used kotlin flow and combine & zip operators!
I write below codes, but when used in activity I don't know how can I get lists!

ViewModel codes :

class ViewModel (private val repository: Repository) : ViewModel() {

    val moviesFlow = repository.moviesList()
    val genresFlow = repository.genresList()

    fun loadData(): Flow<List<Pair<MoviesResponse.Data, GenresList>>> =
        combine(moviesFlow, genresFlow) { movieList: Response<MoviesResponse>,
                                          genreList: Response<GenresList> ->
            val movies = movieList.body()?.data
            val genres = genreList.body()!!
            return@combine movies?.zip(genres)!!
        }
}

Activity codes :

    lifecycleScope.launchWhenCreated {
        viewModel.loadData().collect {
            
        }
    }

I want get each on lists and set into adapter!

When write it into collect, say me select index such as : it[0]

But I want get each lists and set into recycler adapter.

How can I it?

Upvotes: 0

Views: 112

Answers (1)

Arpit Shukla
Arpit Shukla

Reputation: 10493

If I understand you question correctly, you want to convert "list of pairs" to "pair of lists". You can use the unzip function for this.

viewModel.loadData().collect {
    val (movies, genres) = it.unzip()
}

Here, movies will be the list of movies from moviesFlow and genres will be the list of genres from genresFlow.

But if you only wanted these two lists separately, you could have collected the two flows in the Activity directly instead of first zipping and then unzipping.

Upvotes: 1

Related Questions