Sobes.tech
Junior

Πώς να εργαστείτε με συλλογές σε Kotlin;

sobes.tech AI

Απάντηση από AI

Στην Kotlin, οι συλλογές αποτελούν ομάδες αντικειμένων. Μπορούν να είναι μεταβλητές (mutable) ή αμετάβλητες (immutable).

Αμετάβλητες συλλογές (Immutable):

  • Το περιεχόμενο δεν μπορεί να αλλάξει μετά τη δημιουργία.
  • Είναι ασφαλείς για ανάγνωση σε ροές.
  • Βασικοί τύποι: List, Set, Map.
val numbers: List<Int> = listOf(1, 2, 3) // Δημιουργία αμετάβλητης λίστας
// numbers.add(4) // Σφάλμα μεταγλώττισης: αμετάβλητη συλλογή

Μεταβλητές συλλογές (Mutable):

  • Το περιεχόμενο μπορεί να αλλάξει (προσθήκη, διαγραφή, τροποποίηση στοιχείων).
  • Δεν είναι ασφαλείς για ροές από προεπιλογή (απαιτείται χειροκίνητη συγχρονισμός).
  • Βασικοί τύποι: MutableList, MutableSet, MutableMap.
val mutableNumbers: MutableList<Int> = mutableListOf(1, 2, 3) // Δημιουργία μεταβλητής λίστας
mutableNumbers.add(4) // Προσθήκη στοιχείου
mutableNumbers.remove(2) // Διαγραφή στοιχείου

Βασικοί τύποι συλλογών:

  • List: Ταξινομημένη συλλογή, που επιτρέπει διπλότυπα. Πρόσβαση με δείκτη.
    val names: List<String> = listOf("Alice", "Bob", "Alice")
    println(names[0]) // "Alice"
    
  • Set: Μη ταξινομημένη συλλογή, που δεν επιτρέπει διπλότυπα. Τα στοιχεία αποθηκεύονται μοναδικά.
    val uniqueNumbers: Set<Int> = setOf(1, 2, 2, 3)
    println(uniqueNumbers) // [1, 2, 3]
    
  • Map: Συλλογή ζευγών κλειδιού-τιμής. Κάθε κλειδί είναι μοναδικό.
    val ages: Map<String, Int> = mapOf("Alice" to 30, "Bob" to 25)
    println(ages["Alice"]) // 30
    

Επεκτάσεις για εργασία με συλλογές (λειτουργίες ανώτερου επιπέδου):

Το Kotlin παρέχει πολλές ισχυρές λειτουργίες επεκτάσεων για επεξεργασία συλλογών:

  • filter: Δημιουργεί μια νέα συλλογή που περιέχει μόνο τα στοιχεία που ικανοποιούν το προταίρεμα.
    val evenNumbers = numbers.filter { it % 2 == 0 } // [2]
    
  • map: Μετασχηματίζει κάθε στοιχείο της συλλογής σε νέο στοιχείο, δημιουργώντας μια νέα συλλογή.
    val squaredNumbers = numbers.map { it * it } // [1, 4, 9]
    
  • forEach: Εκτελεί μια ενέργεια για κάθε στοιχείο της συλλογής.
    numbers.forEach { println(it) } // Θα εμφανίσει 1, 2, 3 γραμμή προς γραμμή
    
  • reduce: Συνενώνει όλα τα στοιχεία της συλλογής σε μια τιμή, εφαρμόζοντας μια λειτουργία.
    val sum = numbers.reduce { acc, i -> acc + i } // 6
    
  • fold: Όμοιο με το reduce, αλλά λαμβάνει μια αρχική τιμή.
    val sumWithInitial = numbers.fold(10) { acc, i -> acc + i } // 16 (10 + 1 + 2 + 3)
    
  • sortedBy: Ταξινομεί τη συλλογή με βάση μια τιμή που προκύπτει από κάθε στοιχείο.
    val sortedNames = listOf("Charlie", "Alice", "Bob").sortedBy { it } // [Alice, Bob, Charlie]
    
  • groupBy: Ομαδοποιεί τα στοιχεία με βάση ένα κλειδί που προκύπτει από κάθε στοιχείο.
    val groupedNumbers = numbers.groupBy { if (it % 2 == 0) "even" else "odd" } // {odd=[1, 3], even=[2]}
    

Μετατροπή μεταξύ τύπων συλλογών:

Μπορείτε εύκολα να μετατρέψετε έναν τύπο συλλογής σε άλλον, καθώς και μεταξύ μεταβλητών και αμετάβλητων εκδόσεων:

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

Η εργασία με συλλογές στο Kotlin γίνεται πολύ πιο εύκολη χάρη στην πλούσια βιβλιοθήκη και τις λειτουργίες επεκτάσεων.