Sprievodca triedením v Kotline

1. Prehľad

Kotlin nadväzuje na rámec Java Collection pomocou metód rozšírenia. To dramaticky zlepšuje použiteľnosť a čitateľnosť bez potreby závislostí tretích strán, ako sú Apache Commons alebo Guava.

V tomto tutoriáli sa zameriame na triedenie v Kotline. Použijeme tiež kotlin.comparisons balíček na implementáciu komplexných pravidiel pre objednávanie.

2. Triedenie zbierky

Kotlin poskytuje viac obslužných programov, ktoré uľahčujú proces triedenia zbierok. Poďme preskúmať niekoľko z týchto metód.

2.1. Triediť

Najjednoduchší spôsob triedenia zbierky je zavolať na triediť metóda. Pri tejto metóde sa použije prirodzené poradie prvkov. Predvolene sa tiež bude radiť vzostupne, takže „a“ je pred „b“ a „1“ pred „2“:

val triedenéHodnoty = mutableListOf (1, 2, 7, 6, 5, 6) triedenéHodnoty.sort () println (triedenéHodnoty)

A výsledkom vyššie uvedeného kódu je:

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

Je dôležité poznamenať, že sme použili premenlivú zbierku. Dôvod je ten the triediť metóda bude triedená na mieste. Ak chceme, aby sa výsledok vrátil ako nový zoznam, stačí použiť zoradené metóda namiesto toho.

Ďalej môžeme použiť zoradiť zostupne alebo obrátiť metódy triedenia v zostupnom poradí.

2.2. Triediť podľa

Ak potrebujeme triediť podľa konkrétnych vlastností daného objektu, môžeme použiť triediť podľa. The triediť podľa metóda nám umožňuje odovzdať funkciu selektora ako argument. Funkcia selektora prijme objekt a mala by vrátiť hodnotu, podľa ktorej by sme ju chceli zoradiť:

val triedené hodnoty = mutableListOf (1 až „a“, 2 až „b“, 7 až „c“, 6 až „d“, 5 až „c“, 6 až „e“) triedenéValues.sortBy {it.second} println (triedené hodnoty)

A výsledkom vyššie uvedeného kódu je:

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

Zber musí byť opäť premenlivý, pretože triediť podľa metóda bude triedená na mieste. Ak chceme, aby sa výsledok vrátil ako nový zoznam, musíme použiť triedenéBy metóda namiesto triediť podľa metóda.

Rovnako ako predtým, aj v zostupnom poradí môžeme použiť sortByDescending alebo obrátiť metódy.

2.3. SortWith

Pre pokročilejšie použitie (napríklad na kombináciu viacerých pravidiel) môžeme použiť znak sortWith metóda.

Môžeme prejsť a Komparátor objekt ako argument. V Kotline máme niekoľko spôsobov, ako vytvárať Komparátor objekty a tým sa budeme zaoberať v nasledujúcej časti:

val sortValues ​​= mutableListOf (1 až „a“, 2 až „b“, 7 až „c“, 6 až „d“, 5 až „c“, 6 až „e“) sortValues.sortWith (compareBy ({it. second}, {it.first})) println (sortValues)

Výsledkom vyššie uvedeného kódu je, že sú zoradené podľa písmen a potom podľa čísel:

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

Pretože sortWith urobíme triedenie na mieste, musíme použiť premenlivú zbierku. Ak chceme, aby sa výsledok vrátil ako nová kolekcia, musíme použiť triedené s metóda namiesto sortWith metóda.

Pre zostupné poradie môžeme použiť obrátiť metódou alebo alternatívne definovať právo Komparátor.

3. Porovnanie

Kotlin obsahuje veľmi užitočný balík na zostavenie Komparátorkotlin.comparisons. V nasledujúcich častiach si povieme:

  • Komparátor stvorenie
  • Zaobchádzanie s nulový hodnoty
  • Obrátenie poradia
  • Komparátor rozšírenie pravidiel

3.1. Komparátor Tvorba

S cieľom zjednodušiť vytváranie našich Komparátor, Kotlin prináša mnoho továrenských metód na zvýšenie expresivity nášho kódu.

Najjednoduchšie Komparátor továreň k dispozícii je naturalOrder (). Nie sú potrebné žiadne argumenty a poradie je predvolene stúpajúce:

val ascComparator = naturalOrder ()

Pre objekty s viacerými vlastnosťami môžeme použiť porovnaťBy metóda. Ako argumenty dáme variabilný počet funkcií (pravidlá triedenia), ktoré vrátia a Porovnateľné objekt. Potom sa tieto funkcie budú volať postupne až do výsledku Porovnateľné objekt vyhodnotí ako nerovný alebo kým nebudú vyvolané všetky funkcie.

V nasledujúcom príklade to.najprv hodnota sa používa na porovnanie a iba ak sú hodnoty rovnaké, to.sekunda bude vyzvaný na prelomenie nerozhodného výsledku:

val complexComparator = compareBy({it.first}, {it.second})

Nebojte sa preskúmať kotlin.comparisons objaviť všetky dostupné továrne.

3.2. Zaobchádzanie s nulový Hodnoty

Jednoduchý spôsob, ako vylepšiť naše Komparátor s nulový manipulácia s hodnotou je použitie nullsFirst alebo nullPosledné metódy. Tieto metódy sa budú triediť nulový hodnoty na prvom alebo poslednom mieste:

val sortValues ​​= mutableListOf (1 na „a“, 2 na null, 7 na „c“, 6 na „d“, 5 na „c“, 6 na „e“) sortValues.sortWith (nullsLast (compareBy {it.second })) println (triedenéHodnoty)

Výsledkom vyššie uvedeného kódu bude:

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

Vidíme, že posledná hodnota vo výslednej kolekcii je tá s nulový hodnotu.

3.3. Obrátenie objednávky

Na obrátenie poradia môžeme použiť reverseOrder metóda alebo obrátený metóda. Prvá metóda nemá žiadne argumenty a vracia sa v zostupnom poradí. Poslednú metódu je možné použiť na a Komparátor objekt a vráti ho obrátene Komparátor objekt.

Postaviť a Komparátor pomocou zostupného prirodzeného poriadku môžeme:

reverseOrder ()

3.4. Rozšírenie pravidiel komparátora

Komparátor objekty je možné kombinovať alebo rozširovať o ďalšie pravidlá triedenia pomocou potom metódy dostupné v kotlin.rovnateľné balíček.

Až keď sa prvý komparátor vyhodnotí ako rovnocenný, použije sa druhý komparátor.

Náš zoznam študentov obsahuje vek a meno každého jednotlivca. Chceme, aby boli zoradené od najmladších po najstaršie a podľa rovnakého veku zostupne podľa mena:

val študenti = mutableListOf (21 na „Helenu“, 21 na „Toma“, 20 na „Jima“) val ageComparator = compareBy {it.first} val ageAndNameComparator = ageComparator.thenByDescending {it.second} println (students.sortedWith (ageAndNameComparator))

Výsledkom vyššie uvedeného kódu bude:

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

4. Záver

V tomto rýchlom výučbe sme videli, ako používať triediť, triediť podľa a sortWith metódy na triedenie zbierok v Kotline.

Neskôr sme použili aj my kotlin.comparisons balíček na vytvorenie Komparátor objekty a vylepšiť ich o ďalšie pravidlá triedenia.

Implementáciu všetkých týchto príkladov a úryvkov nájdete na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found