Home > front end >  How to convert a mutablelist to a collection to use addAll?
How to convert a mutablelist to a collection to use addAll?

Time:11-22

I'm trying to retrieve some data from a service, and I'm working with a mutablelist to store the objects. The problem is that I need to add the retrived data to this mutablelist, but addAll says me that the type is mismatched.

screenshot

CodePudding user response:

the problem here is nullability. you are passing a nullable collection( your MutableList) to a not-nullable collection. one approach is to mark the MutableList as not-nullable by adding !! at the end of your nullable Mutablelist. to give you some idea, check this snippet code:

    var collection:Collection<String> = emptyList()
    var myList:MutableList<String>? = mutableListOf()
    
    collection = myList!!

CodePudding user response:

Here's what you're doing

data.addAll(recursiveResponse.body()?.data)

You're having to null-check (with ?) before accessing data, because body() can return null. If body() returns a value, the whole expression evaluates to data. If it returns null, the whole expression evaluates to null - and calling addAll with null is not allowed. So you can't pass in a nullable collection.

That means you need to null-check your results before you try to add them:

recursiveResponse.body()?.data?.let { results -> data.addAll(results) }

This null-checks everything down to data, and if nothing in the chain evaluates to null, then it calls the let block. Because the list being passed in has been null-checked, it definitely isn't null, so it's cast to the non-null type that addAll accepts. This is how you handle potentially null stuff safely - by ensuring that it isn't null before you try to use it.

  • Related