Iterable.plus în Kotlin

Operatorii + și - pe colecții: creează o listă nouă cu elemente adăugate sau scoase, fără să schimbe originalul.

Sintaxă
operator fun <T> Iterable<T>.plus(element: T): List<T>
operator fun <T> Iterable<T>.plus(elemente: Iterable<T>): List<T>
operator fun <T> Iterable<T>.minus(element: T): List<T>
operator fun <T> Iterable<T>.minus(elemente: Iterable<T>): List<T>

Ce face Iterable.plus

lista + x întoarce o listă nouă cu x adăugat la final; lista + altaLista le lipește. Originalul rămâne neschimbat, deci merge și pe liste doar pentru citire.

lista - x scoate prima apariție a lui x. lista - altaLista scoate toate aparițiile elementelor care sunt în a doua colecție.

Pe un Set rezultatul este tot un Set. Pe o MutableList declarată cu val, += adaugă pe loc (este addAll).

Parametri

Parametru Descriere
element / elemente Un singur element sau o colecție de elemente de adăugat ori de scos.

Ce returnează

O List<T> nouă (sau Set<T> când colecția din stânga este un set).

Exemple

Exemplul 1: Adăugare și lipire

Fiecare + creează o listă nouă; echipa nu se schimbă.

fun main() {
    val echipa = listOf("Ana", "Ion")
    val cuMaria = echipa + "Maria"
    val toti = cuMaria + listOf("Radu", "Elena")
    println(echipa)
    println(cuMaria)
    println(toti)
}

Rezultat

[Ana, Ion]
[Ana, Ion, Maria]
[Ana, Ion, Maria, Radu, Elena]

Exemplul 2: minus: prima apariție sau toate

- 3 scoate doar primul 3. - listOf(3) scoate toate valorile 3.

fun main() {
    val numere = listOf(1, 3, 5, 3, 7, 3)
    println(numere - 3)
    println(numere - listOf(3))
    println(numere - setOf(1, 7))
}

Rezultat

[1, 5, 3, 7, 3]
[1, 5, 7]
[3, 5, 3, 3]

Exemplul 3: Pe set și cu +=

Pe un set, + nu creează duplicate. Pe o variabilă var de tip List, += înlocuiește lista cu una nouă.

fun main() {
    val culori = setOf("roșu", "galben")
    println(culori + "albastru" + "roșu")

    var istoric = listOf("pagina 1")
    istoric += "pagina 2"
    println(istoric)
}

Rezultat

[roșu, galben, albastru]
[pagina 1, pagina 2]

Greșeli frecvente

  • Folosești + într-o buclă pentru mii de elemente: fiecare pas copiază toată lista. Folosește o MutableList și add.
  • Te aștepți ca lista - x să scoată toate aparițiile lui x: scoate doar prima. Scrie lista - listOf(x) sau filter { it != x }.

Comenzi înrudite

  • Iterable.union: Operații pe mulțimi: union (reuniunea), intersect (elementele comune) și subtract (diferența); rezultatul e un Set.
  • MutableList.add: Adaugă un element la finalul listei sau la o poziție dată; addAll adaugă mai multe elemente deodată.
  • Map.plus: Operatorii + și – pe map-uri: creează un map nou cu intrări adăugate sau cu chei scoase, fără să schimbe originalul.
  • listOf: Creează o listă din elementele date: listOf pentru citire, mutableListOf și arrayListOf pentru o listă pe care o modifici.