Útmutató a válogatáshoz Kotlinban

1. Áttekintés

Kotlin kiterjesztési módszerekkel épít a Java Collection keretrendszer tetejére. Ez drámai módon javítja a használhatóságot és az olvashatóságot harmadik féltől származó függőségek, például az Apache Commons vagy a Guava nélkül.

Ebben az oktatóanyagban a Kotlinban történő rendezésre fogunk összpontosítani. Ezenkívül a kotlin.összehasonlítások csomag a komplex rendelési szabályok megvalósításához.

2. Gyűjtemény rendezése

A Kotlin több segédprogramot kínál a gyűjtemények válogatásának megkönnyítése érdekében. Fedezzük fel ezek közül a módszerek közül többet.

2.1. Fajta

A gyűjtemény rendezésének legegyszerűbb módja a fajta módszer. Ez a módszer az elemek természetes sorrendjét fogja használni. Ezenkívül alapértelmezés szerint növekvő irányba rendeződik, így az „a” a „b” előtt, az „1” pedig a „2” előtt áll:

val sortedValues ​​= mutableListOf (1, 2, 7, 6, 5, 6) sortedValues.sort () println (sortedValues)

És a fenti kód eredménye:

[1, 2, 5, 6, 6, 7]

Fontos megjegyezni, hogy egy módosítható gyűjteményt használtunk. Ennek oka az a fajta módszer helyben rendezi. Ha azt szeretnénk, hogy az eredmény új listaként kerüljön vissza, akkor csak a válogatott módszer helyett.

Továbbá használhatjuk a sortDescending vagy fordított módszerek csökkenő sorrendben történő rendezésre.

2.2. Sorrend

Ha egy adott objektum adott tulajdonságai szerint kell rendezni, használhatjuk Sorrend. A Sorrend A módszer lehetővé teszi számunkra, hogy argumentumként átadjuk a választó függvényt. A választó funkció megkapja az objektumot, és vissza kell adnia azt az értéket, amelyen rendezni szeretnénk:

val sortedValues ​​= mutableListOf (1 - "a", 2 - "b", 7 - "c", 6 - "d", 5 - "c", 6 - "e") sortedValues.sortBy {it.second} println (sortedValues)

És a fenti kód eredménye:

[(1, a), (2, b), (7, c), (5, c), (6, d), (6, e)]

A gyűjteménynek megint változtathatónak kell lennie, mert a Sorrend módszer helyben rendezi. Ha azt szeretnénk, hogy az eredmény új listaként térjen vissza, akkor a rendezveBy módszer helyett Sorrend módszer.

Az előzőekhez hasonlóan a csökkenő sorrendhez használhatjuk a sortByDescending vagy fordított mód.

2.3. SortWith

Haladóbb használat érdekében (például több szabály kombinálásához) használhatjuk a sortWith módszer.

Áthaladhatunk a Összehasonlító objektum mint érv. Kotlinban többféle módon lehet létrehozni Összehasonlító tárgyakat, és ezt a következő szakaszban tárgyaljuk:

val sortedValues ​​= mutableListOf (1 - "a", 2 - "b", 7 - "c", 6 - "d", 5 - "c", 6 - "e") sortedValues.sortWith (összehasonlítBy ({it. második}, {it.first})) println (sortedValues)

És a fenti kód eredménye az, hogy betű, majd szám szerint vannak rendezve:

[(1, a), (2, b), (5, c), (7, c), (6, d), (6, e)]

Mert a sortWith helyben fogja elvégezni a válogatást, egy módosítható gyűjteményt kell használnunk. Ha azt szeretnénk, hogy az eredmény új gyűjteményként kerüljön vissza, akkor a válogatva módszer helyett sortWith módszer.

Csökkenő sorrendben használhatjuk a fordított módszerrel vagy alternatív megoldásként meghatározhatja a jogot Összehasonlító.

3. Összehasonlítás

A Kotlin nagyon hasznos csomagot tartalmaz a Összehasonlítókotlin.összehasonlítások. A következő szakaszokban megvitatjuk:

  • Összehasonlító Teremtés
  • A. Kezelése nulla értékek
  • A sorrend megfordítása
  • Összehasonlító szabályok kiterjesztése

3.1. Összehasonlító Teremtés

Annak érdekében, hogy egyszerűbbé tegyük a Összehasonlító, Kotlin számos gyári módszert hoz a kódunk kifejezőbbé tételéhez.

A legegyszerűbb Összehasonlító gyárban kapható van naturalOrder (). Nincs szükség argumentumokra, és a sorrend alapértelmezés szerint növekvő:

val ascComparator = naturalOrder ()

Több tulajdonságú objektumok esetén használhatjuk a összehasonlít módszer. Argumentumként változó számú függvényt adunk meg (rendezési szabályok), amelyek mindegyike a-t adja vissza Hasonló tárgy. Ezután ezeket a függvényeket egymás után hívjuk meg, amíg az eredmény nem lesz Hasonló Az objektum értékelése nem egyenlő, vagy amíg az összes függvényt meg nem hívják.

A következő példában azt.első értéket használjuk az összehasonlításhoz, és csak akkor, ha az érték egyenlő, azt.második felhívják a döntetlen megszakítására:

val complexComparator = összehasonlításBy({it.first}, {it.second})

Nyugodtan fedezze fel kotlin.összehasonlítások hogy felfedezzék az összes rendelkezésre álló gyárat.

3.2. A. Kezelése nulla Értékek

Egyszerű módja annak, hogy javítsuk Összehasonlító val vel nulla értékkezelés az nullsElőször vagy nullsLast mód. Ezek a módszerek rendezni fogják nulla értékek az első, illetve az utolsó helyen:

val sortedValues ​​= mutableListOf (1 - "a", 2 - null, 7 - "c", 6 - "d", 5 - "c", 6 - "e") sortedValues.sortWith (nullsLast (összehasonlítBy {it.second) })) println (sortedValues)

A fenti kód eredménye:

[(1, a), (7, c), (5, c), (6, d), (6, e), (2, null)]

Láthatjuk, hogy az eredményül kapott gyűjtemény utolsó értéke az nulla érték.

3.3. A megrendelés visszavonása

A sorrend megfordításához használhatjuk a fordított sorrendben módszer vagy az megfordítva módszer. Az előbbi metódusnak nincs argumentuma, és csökkenő sorrendet ad vissza. Ez utóbbi módszer alkalmazható a Összehasonlító objektumot, és vissza fogja adni a fordítottját Összehasonlító tárgy.

A Összehasonlító csökkenő természetes sorrendben megtehetjük:

fordított sorrendben()

3.4. Összehasonlító szabályok kiterjesztése

Összehasonlító az objektumokat kombinálhatjuk vagy kibővíthetjük további rendezési szabályokkal a azután ban elérhető módszerek kotlin. összehasonlítható csomag.

Csak akkor használjuk a második összehasonlítót, ha az első összehasonlító értéke egyenlő.

A hallgatóink listája minden egyes korosztályt és nevet tartalmaz. Azt akarjuk, hogy a legfiatalabbaktól a legidősebbekig válogassanak, és amikor egyidősek, a név alapján csökkenő módon válnak:

val hallgatók = mutableListOf (21 - "Helen", 21 - "Tom", 20 - "Jim") val ageComparator = CompareBy {it.first} val ageAndNameComparator = ageComparator.thenByDescending {it.second} println (students.sortedWith (ageAndNameComparator))

A fenti kód eredménye:

[(20, Jim), (21, Tom), (21, Helen)]

4. Következtetés

Ebben a gyors bemutatóban láttuk, hogyan kell használni a fajta, Sorrend és sortWith módszerek a Kotlin-i gyűjtemények rendezése érdekében.

Később mi is használtuk kotlin.összehasonlítások csomagot létrehozni Összehasonlító objektumokat és további rendezési szabályokkal bővíteni őket.

Ezeknek a példáknak és kivonatoknak a megvalósítása megtalálható a GitHub-on.