Como inicializo a MutableList do Kotlin para esvaziar a MutableList?

241

Parece tão simples, mas como inicializar o Kotlin MutableListpara esvaziar MutableList?

Eu poderia invadir dessa maneira, mas tenho certeza de que há algo mais fácil disponível:

var pusta: List<Kolory> = emptyList()
var cos: MutableList<Kolory> = pusta.toArrayList()
ssuukk
fonte

Respostas:

436

Você pode simplesmente escrever:

val mutableList = mutableListOf<Kolory>()

Esta é a maneira mais idiomática.

Formas alternativas são

val mutableList : MutableList<Kolory> = arrayListOf()

ou

val mutableList : MutableList<Kolory> = ArrayList()

Isso está explorando o fato de que tipos java como ArrayListestão implementando implicitamente o tipo MutableListpor meio de um truque do compilador.

Kirill Rakhman
fonte
Você precisa importar alguma coisa? Quando eu escrevo isso no meu projeto atual eu recebo referência não resolvida arrayListOf e mesmo se eu tentar mutableListOf
vextorspace
Você tem o stdlib no seu caminho de classe?
Kirill Rakhman
Eu apenas tive que mudar minha bandeira kotlin_version na minha build.gradle de volta para 1.1.0 em vez de 1.1.1
vextorspace
1
@androiddeveloper é porque nãokotlin.collections.List é . O Kotlin possui um mecanismo para mapear alguns tipos de java embutidos. Consulte kotlinlang.org/docs/reference/java-interop.html#mapped-types e questões SO semelhantes. A seção de comentários não é apropriada para discutir isso em detalhes. java.utils.List
Kirill Rakhman
1
@Mohanakrrishna sim, as funções suportam a passagem de argumentos.
Kirill Rakhman
17

Várias formas, dependendo do tipo de lista, para Lista de matrizes:

val myList = mutableListOf<Kolory>() 
// or more specifically use the helper for a specific list type
val myList = arrayListOf<Kolory>()

Para LinkedList:

val myList = linkedListOf<Kolory>()
// same as
val myList: MutableList<Kolory> = linkedListOf()

Para outros tipos de lista, será assumido Mutável se você os construir diretamente:

val myList = ArrayList<Kolory>()
// or
val myList = LinkedList<Kolory>()

Isso vale para qualquer coisa que implemente a Listinterface (ou seja, outras bibliotecas de coleções).

Não é necessário repetir o tipo no lado esquerdo se a lista já estiver Mutável. Ou apenas se você quiser tratá-los como somente leitura, por exemplo:

val myList: List<Kolory> = ArrayList()
Jayson Minard
fonte
E se eu souber o tamanho da nova MutableList? Para ArrayList, eu posso fazer: ArrayList(24)por exemplo, se eu acho que 24 é um bom começo, provavelmente não precisará de mais do que isso.
desenvolvedor android
@androiddeveloper Veja os documentos para os construtores da lista ou a API Java para as listas subjacentes e você verá opções para o que deseja.
Jayson Minard
você esqueceu mutableListOf. O correto seria:val myList = arrayListOf<Kolory>() // same as // val myList = mutableListOf<Kolory>()
user924 14/01/19
10

Eu gosto abaixo para:

var book: MutableList<Books> = mutableListOf()

/ ** Retorna um novo [MutableList] com os elementos fornecidos. * /

public fun <T> mutableListOf(vararg elements: T): MutableList<T>
    = if (elements.size == 0) ArrayList() else ArrayList(ArrayAsCollection(elements, isVarargs = true))
Chang
fonte