Sobes.tech
Junior

Hogyan dolgozzunk a gyűjteményekkel Kotlinben?

sobes.tech MI

Válasz az MI-től

A Kotlinban a gyűjtemények objektumcsoportokat képviselnek. Lehetnek módosíthatóak (mutable) vagy nem módosíthatóak (immutable).

Nem módosítható gyűjtemények (Immutable):

  • Tartalmuk nem változtatható meg a létrehozás után.
  • Olvasásbiztonságosak több szálon.
  • Alap típusok: List, Set, Map.
val numbers: List<Int> = listOf(1, 2, 3) // Nem módosítható lista létrehozása
// numbers.add(4) // Fordítási hiba: nem módosítható gyűjtemény

Módosítható gyűjtemények (Mutable):

  • Tartalmuk módosítható (elem hozzáadása, törlése, módosítása).
  • Alapértelmezés szerint nem szálbiztosak (kézi szinkronizáció szükséges).
  • Alap típusok: MutableList, MutableSet, MutableMap.
val mutableNumbers: MutableList<Int> = mutableListOf(1, 2, 3) // Módosítható lista létrehozása
mutableNumbers.add(4) // Elem hozzáadása
mutableNumbers.remove(2) // Elem eltávolítása

Gyűjtemény típusok főbb jellemzői:

  • List: Rendezett gyűjtemény, duplikátumokat engedélyez. Index alapján érhető el.
    val names: List<String> = listOf("Alice", "Bob", "Alice")
    println(names[0]) // "Alice"
    
  • Set: Rendezettlen gyűjtemény, duplikátumokat nem enged. Az elemek egyediek.
    val uniqueNumbers: Set<Int> = setOf(1, 2, 2, 3)
    println(uniqueNumbers) // [1, 2, 3]
    
  • Map: Pár kulcs-érték gyűjtemény. Minden kulcs egyedi.
    val ages: Map<String, Int> = mapOf("Alice" to 30, "Bob" to 25)
    println(ages["Alice"]) // 30
    

Gyűjteményekhez tartozó kiterjesztések (felsőbb rendű függvények):

A Kotlin számos erőteljes kiterjesztő függvényt kínál a gyűjtemények kezelésére:

  • filter: Új gyűjteményt hoz létre, amely csak azokat az elemeket tartalmazza, amelyek megfelelnek a predikátumnak.
    val evenNumbers = numbers.filter { it % 2 == 0 } // [2]
    
  • map: Minden elemhez egy új értéket rendel, és új gyűjteményt hoz létre.
    val squaredNumbers = numbers.map { it * it } // [1, 4, 9]
    
  • forEach: Minden elemre végrehajt egy műveletet.
    numbers.forEach { println(it) } // 1, 2, 3 soronként
    
  • reduce: Összefűzi az összes elemet egy értékké egy művelet alkalmazásával.
    val sum = numbers.reduce { acc, i -> acc + i } // 6
    
  • fold: Hasonló a reduce-hez, de megadott kezdőértékkel.
    val sumWithInitial = numbers.fold(10) { acc, i -> acc + i } // 16 (10 + 1 + 2 + 3)
    
  • sortedBy: Rendez egy gyűjteményt egy érték szerint, amelyet minden elemből nyer.
    val sortedNames = listOf("Charlie", "Alice", "Bob").sortedBy { it } // [Alice, Bob, Charlie]
    
  • groupBy: Csoportosítja az elemeket egy kulcs szerint, amelyet minden elemből nyer.
    val groupedNumbers = numbers.groupBy { if (it % 2 == 0) "even" else "odd" } // {odd=[1, 3], even=[2]}
    

Átalakítás gyűjteménytípusok között:

Egyszerűen konvertálhat egy gyűjteménytípust másikra, valamint módosítható és nem módosítható változatok között:

val mutableList: MutableList<Int> = listOf(1, 2, 3).toMutableList()
val immutableList: List<Int> = mutableListOf(4, 5, 6).toList()

A gyűjteményekkel való munka a Kotlinban jelentősen megkönnyíti a gazdag standard könyvtár és az kiterjesztő függvények révén.