Como adicionar um item a uma ArrayList em Kotlin?

Respostas:

103

Para pessoas que estão migrando de java, In Kotlin Listé por padrão imutável e uma versão mutável de Lists é chamada MutableList.

Portanto, se você tiver algo como:

val list: List<String> = ArrayList()

Nesse caso, você não obterá um add()método, pois list é imutável. Portanto, você terá que declarar um MutableListconforme mostrado abaixo:

val list: MutableList<String> = ArrayList()

Agora você verá um add()método e poderá adicionar elementos a qualquer lista.

Tarun
fonte
5
Obrigado! Eu tenho batido minha cabeça sobre esse método positivo em Arrays ...
dasfima
1
Legal, exatamente o que estou procurando. Obrigado.
Sam Chen
Qual é a diferença de uso entre val list: MutableList<String> = ArrayList()e val list = mutableListOf<String>()?
Sam Chen
79

Se você tiver uma coleção MUTABLE :

val list = mutableListOf(1, 2, 3)
list += 4

Se você tiver uma coleção IMUTÁVEL :

var list = listOf(1, 2, 3)
list += 4

note que eu uso valpara a lista mutável para enfatizar que o objeto é sempre o mesmo, mas seu conteúdo muda.

No caso da lista imutável, você tem que fazê-la var. Um novo objeto é criado pelo +=operador com o valor adicional.

guenhter
fonte
7
fazendo +=em uma lista não mutável, exigir a cópia de todos os elementos da lista em uma nova lista mutável e então reatribuí-la à sua lista real. Não sabia que era adequado declarar sua lista como var. de qualquer forma, declarar uma lista var não é uma boa ideia para mim.
crgarridos
1
Se uma lista for imutável, você não tem outra opção além de declará-la como var. Se uma lista imutável for declarada como val, então a lista nunca poderá ser alterada. Apenas reatribuí-lo a outra variável seria possível.
guenhter
1
Exatamente, não quero permitir alterar a referência das minhas variáveis. pode ter um efeito colateral em tarefas externas / simultâneas. melhor criar uma cópia para extrair a lógica. Mas isso está fora do escopo da questão.
crgarridos de
24

Se você deseja usar especificamente java ArrayList, pode fazer algo assim:

fun initList(){
    val list: ArrayList<String> = ArrayList()
    list.add("text")
    println(list)
}

Caso contrário, a resposta @guenhter é a que você está procurando.

Pokemzok
fonte