Guide til sortering i Kotlin

1. Oversikt

Kotlin bygger på Java Collection-rammeverket ved hjelp av utvidelsesmetoder. Dette forbedrer brukervennligheten og lesbarheten dramatisk uten behov for tredjepartsavhengigheter som Apache Commons eller Guava.

I denne opplæringen vil vi fokusere på sortering i Kotlin. Vi bruker også kotlin. sammenligninger pakke for å implementere komplekse bestillingsregler.

2. Sortere en samling

Kotlin tilbyr flere verktøy for å gjøre prosessen med å sortere samlinger enklere. La oss utforske flere av disse metodene.

2.1. Sortere

Den enkleste måten å sortere en samling på er å ringe sortere metode. Denne metoden vil bruke den naturlige rekkefølgen til elementene. Dessuten vil den bestille 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 av koden ovenfor er:

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

Det er viktig å merke seg at vi har brukt en foranderlig samling. Årsaken er at de sortere metoden vil sortere på plass. Hvis vi vil at resultatet skal returneres som en ny liste, trenger vi bare å bruke sortert metode i stedet.

Videre kan vi bruke sort Nedadgående eller omvendt metoder for sortering i synkende rekkefølge.

2.2. Sorter etter

Hvis vi trenger å sortere etter spesifikke egenskaper til et gitt objekt, kan vi bruke det Sorter etter. De Sorter etter metoden lar oss passere en velgerfunksjon som et argument. Velgerfunksjonen vil motta objektet og skal returnere verdien vi vil sortere på:

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 av koden ovenfor er:

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

Igjen må samlingen være foranderlig fordi Sorter etter metoden vil sortere på plass. Hvis vi vil at resultatet skal returneres som en ny liste, må vi bruke sortert av metoden i stedet for Sorter etter metode.

Som før, for synkende rekkefølge, kan vi bruke sortByDescending eller omvendt metoder.

2.3. SortWith

For en mer avansert bruk (for eksempel å kombinere flere regler), kan vi bruke sortWith metode.

Vi kan passere en Komparator objekt som argument. I Kotlin har vi flere måter å lage Komparator objekter, og vi vil dekke det i neste avsnitt:

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

Og resultatet av koden ovenfor er at de er sortert etter bokstav og deretter etter nummer:

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

Fordi det sortWith vil gjøre sorteringen på plass, må vi bruke en foranderlig samling. Hvis vi vil at resultatet skal returneres som en ny samling, må vi bruke sortertMed metoden i stedet for sortWith metode.

For synkende rekkefølge kan vi bruke omvendt metode eller alternativt definere høyre Komparator.

3. Sammenligning

Kotlin inneholder en veldig nyttig pakke for å bygge en Komparatorkotlin. sammenligninger. I de følgende avsnittene vil vi diskutere:

  • Komparator opprettelse
  • Håndtering av null verdier
  • Omvendt ordren
  • Komparator regler utvidelse

3.1. Komparator Opprettelse

For å forenkle etableringen av vår Komparator, Kotlin har mange fabrikkmetoder for å gjøre koden vår mer uttrykksfull.

Det enkleste Komparator fabrikk tilgjengelig er naturlig bestilling (). Ingen argumenter er nødvendig og rekkefølgen er stigende som standard:

val ascComparator = naturalOrder ()

For objekter med flere egenskaper kan vi bruke sammenligne metode. Som argumenter gir vi et variabelt antall funksjoner (sorteringsregler) som hver vil returnere a Sammenlignelig gjenstand. Deretter vil disse funksjonene kalles sekvensielt til det resulterende Sammenlignelig objektet vurderes som ikke like eller til alle funksjoner blir kalt.

I neste eksempel, den.først verdien brukes til sammenligning, og bare når verdiene er like, det. andre vil bli kalt for å bryte uavgjort:

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

Utforsk gjerne kotlin. sammenligninger for å oppdage alle tilgjengelige fabrikker.

3.2. Håndtering av null Verdier

En enkel måte å forbedre vår Komparator med null verdihåndtering er å bruke nullsFirst eller nullSiste metoder. Disse metodene vil sorteres null verdier på henholdsvis første eller siste plass:

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

Resultatet av koden ovenfor blir:

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

Vi kan se at den siste verdien i den resulterende samlingen er den med null verdi.

3.3. Å reversere ordren

For å reversere bestillingen kan vi bruke omvendt rekkefølge metoden eller snudd metode. Den tidligere metoden har ingen argumenter og returnerer en synkende rekkefølge. Sistnevnte metode kan brukes på en Komparator objektet, og det vil returnere sitt omvendte Komparator gjenstand.

Å bygge en Komparator ved hjelp av fallende naturlig orden kan vi gjøre:

omvendt rekkefølge()

3.4. Utvidelse av komparatorregler

Komparator objekter kan kombineres eller utvides med flere sorteringsregler via deretter metoder tilgjengelig i kotlin. sammenlignbar pakke.

Først når den første komparatoren evalueres til lik, vil den andre komparatoren bli brukt.

Vår elevliste inneholder en alder og et navn for hver enkelt. Vi vil ha dem sortert fra yngste til eldste, og når de er i samme alder, synkende basert på navnet:

val studenter = 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 av koden ovenfor blir:

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

4. Konklusjon

I denne raske opplæringen så vi hvordan du bruker sortere, Sorter etter og sortWith metoder for å sortere samlinger i Kotlin.

Senere brukte vi også kotlin. sammenligninger pakke å lage Komparator objekter og for å forbedre dem med flere sorteringsregler.

Implementeringen av alle disse eksemplene og utdragene finner du på GitHub.


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