Iterable.toSet în Kotlin

Transformă colecția într-o mulțime (fără duplicate): toSet, toMutableSet sau toSortedSet (sortată).

Sintaxă
fun <T> Iterable<T>.toSet(): Set<T>
fun <T> Iterable<T>.toMutableSet(): MutableSet<T>
fun <T : Comparable<T>> Iterable<T>.toSortedSet(): java.util.SortedSet<T>

Ce face Iterable.toSet

toSet() pune elementele într-un Set: fiecare valoare apare o singură dată. Ordinea primei apariții se păstrează (în spate este un LinkedHashSet). Verificarea x in set este foarte rapidă, mult mai rapidă decât într-o listă mare.

toMutableSet() dă o mulțime modificabilă, în care poți adăuga sau scoate elemente. toSortedSet() (doar pe JVM) dă o mulțime ordonată crescător, care rămâne sortată și după ce adaugi elemente noi.

Ce returnează

Un Set<T>, MutableSet<T> sau SortedSet<T> nou.

Exemple

Exemplul 1: Etichete unice

Duplicatele dispar, iar ordinea rămâne cea a primei apariții.

fun main() {
    val etichete = listOf("kotlin", "java", "kotlin", "android", "java")
    val unice = etichete.toSet()
    println(unice)
    println("android" in unice)
}

Rezultat

[kotlin, java, android]
true

Exemplul 2: Mulțime modificabilă

add întoarce false dacă elementul exista deja, deci putem afla dacă orașul este nou.

fun main() {
    val vizitate = listOf("Iași", "Cluj").toMutableSet()
    println(vizitate.add("Sibiu"))
    println(vizitate.add("Iași"))
    println(vizitate)
}

Rezultat

true
false
[Iași, Cluj, Sibiu]

Exemplul 3: toSortedSet rămâne sortat

Notele distincte apar în ordine crescătoare. După add(5), noul element își găsește singur locul.

fun main() {
    val note = listOf(9, 7, 10, 7, 9, 8)
    val distincte = note.toSortedSet()
    println(distincte)
    distincte.add(5)
    println(distincte)
    println("Cea mai mică: ${distincte.first()}")
}

Rezultat

[7, 8, 9, 10]
[5, 7, 8, 9, 10]
Cea mai mică: 5

Greșeli frecvente

  • Cauți des în liste mari cu x in lista: fiecare căutare parcurge lista. Transformă o dată lista în set.
  • Te aștepți ca toSet() să sorteze: păstrează ordinea primei apariții. Pentru ordine folosește toSortedSet() sau sorted().

Comenzi înrudite

  • Iterable.distinct: Elimină duplicatele și întoarce o listă cu fiecare element o singură dată, în ordinea primei apariții.
  • setOf: Creează o mulțime: o colecție fără duplicate, în care verifici rapid dacă un element există.
  • Iterable.union: Operații pe mulțimi: union (reuniunea), intersect (elementele comune) și subtract (diferența); rezultatul e un Set.
  • Iterable.toList: Copiază elementele într-o listă nouă: toList dă o listă doar pentru citire, toMutableList una modificabilă.
  • hashSetOf: Creează o mulțime modificabilă: HashSet (fără ordine garantată) sau TreeSet (elemente mereu sortate).