Vejledning til sortering i Kotlin

1. Oversigt

Kotlin bygger oven på Java Collection-rammen ved hjælp af udvidelsesmetoder. Dette forbedrer anvendelighed og læsbarhed dramatisk uden behov for tredjepartsafhængigheder som Apache Commons eller Guava.

I denne vejledning fokuserer vi på sortering i Kotlin. Vi bruger også kotlin. sammenligninger pakke til implementering af komplekse ordreregler.

2. Sortering af en samling

Kotlin tilbyder flere hjælpeprogrammer for at gøre processen med at sortere samlinger lettere. Lad os udforske flere af disse metoder.

2.1. Sortere

Den enkleste måde at sortere en samling på er at ringe til sortere metode. Denne metode bruger den naturlige rækkefølge af elementerne. Det vil også ordne i stigende retning som standard, så 'a' er før 'b' og '1' er før '2':

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

Og resultatet af ovenstående kode er:

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

Det er vigtigt at bemærke, at vi har brugt en ændret samling. Årsagen er, at det sortere metode sorteres på plads. Hvis vi ønsker, at resultatet skal returneres som en ny liste, skal vi bare bruge sorteret metode i stedet.

Desuden kan vi bruge sort Nedadgående eller baglæns metoder til sortering i faldende rækkefølge.

2.2. Sorter efter

Hvis vi har brug for at sortere efter specifikke egenskaber for et givet objekt, kan vi bruge det Sorter efter. Det Sorter efter metode giver os mulighed for at videregive en vælgerfunktion som et argument. Vælgerfunktionen modtager objektet og skal returnere den værdi, som vi vil sortere:

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

Og resultatet af ovenstående kode er:

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

Igen skal samlingen være ændret, fordi Sorter efter metode sorteres på plads. Hvis vi ønsker, at resultatet skal returneres som en ny liste, skal vi bruge sorteret efter metode i stedet for Sorter efter metode.

Som før, for faldende rækkefølge, kan vi bruge sortByDescending eller baglæns metoder.

2.3. Sorter med

For en mere avanceret brug (for eksempel at kombinere flere regler) kan vi bruge sorter med metode.

Vi kan passere en Komparator objekt som argument. I Kotlin har vi flere måder at skabe Komparator objekter, og vi vil dække det i næste afsnit:

val sortedValues ​​= mutableListOf (1 til "a", 2 til "b", 7 til "c", 6 til "d", 5 til "c", 6 til "e") sortedValues.sortWith (sammenlignBy ({it. sekund}, {it.first})) println (sortedValues)

Og resultatet af ovenstående kode er, at de er sorteret efter bogstav og derefter efter nummer:

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

Fordi sorter med vil foretage sorteringen på plads, skal vi bruge en ændret samling. Hvis vi ønsker, at resultatet skal returneres som en ny samling, skal vi bruge sorteretMed metode i stedet for sorter med metode.

For faldende rækkefølge kan vi bruge baglæns metode eller alternativt definere højre Komparator.

3. Sammenligning

Kotlin indeholder en meget nyttig pakke til at bygge en Komparatorkotlin. sammenligninger. I de følgende afsnit vil vi diskutere:

  • Komparator skabelse
  • Håndtering af nul værdier
  • Omvendt ordren
  • Komparator regler udvidelse

3.1. Komparator Skabelse

For at forenkle oprettelsen af ​​vores Komparator, Kotlin bringer mange fabriksmetoder til at gøre vores kode mere udtryksfuld.

Den enkleste Komparator fabrik tilgængelig er naturlig bestilling (). Ingen argumenter er nødvendige, og rækkefølgen stiger som standard:

val ascComparator = naturalOrder ()

For objekter med flere egenskaber kan vi bruge sammenlignBy metode. Som argumenter giver vi et variabelt antal funktioner (sorteringsregler), der hver returnerer a Sammenlignelig objekt. Derefter kaldes disse funktioner sekventielt indtil det resulterende Sammenlignelig objekt vurderes som ikke ens, eller indtil alle funktioner kaldes.

I det næste eksempel det.først værdi bruges til sammenligninger, og kun når værdier er ens, det. anden vil blive kaldt til at bryde uafgjort:

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

Du er velkommen til at udforske kotlin. sammenligninger at opdage alle de tilgængelige fabrikker.

3.2. Håndtering af nul Værdier

En enkel måde at forbedre vores Komparator med nul værdihåndtering er at bruge nullsFørst eller nullsLast metoder. Disse metoder sorteres nul værdier på henholdsvis første eller sidste sted:

val sortedValues ​​= mutableListOf (1 til "a", 2 til null, 7 til "c", 6 til "d", 5 til "c", 6 til "e") sortedValues.sortWith (nullsLast (sammenlignBy {it.second) })) println (sortedValues)

Resultatet af ovenstående kode bliver:

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

Vi kan se, at den sidste værdi i den resulterende samling er den med nul værdi.

3.3. Tilbageførsel af ordren

For at vende ordren kan vi bruge omvendt rækkefølge metode eller omvendt metode. Den førstnævnte metode har ingen argumenter og returnerer en faldende rækkefølge. Sidstnævnte metode kan anvendes på en Komparator objekt, og det vil vende omvendt Komparator objekt.

At bygge en Komparator ved hjælp af faldende naturlig rækkefølge kan vi gøre:

omvendt rækkefølge()

3.4. Udvidelse af komparatorregler

Komparator objekter kan kombineres eller udvides med yderligere sorteringsregler via derefter metoder tilgængelige i kotlin. sammenlignelig pakke.

Først når den første komparator evalueres til lige, vil den anden komparator derefter blive brugt.

Vores liste over studerende indeholder en alder og et navn for hver enkelt. Vi vil have dem sorteret fra den yngste til den ældste, og når de er i samme alder, faldende ud fra navnet:

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

Resultatet af ovenstående kode bliver:

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

4. Konklusion

I denne hurtige vejledning så vi, hvordan man bruger sortere, Sorter efter og sorter med metoder til at sortere samlinger i Kotlin.

Senere brugte vi også kotlin. sammenligninger pakke at oprette Komparator objekter og forbedre dem med yderligere sorteringsregler.

Implementeringen af ​​alle disse eksempler og uddrag findes på GitHub.


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