Kotlin er et moderne programmeringsspråk som kompilerer til Java bytecode. Det er gratis og åpen kildekode, og lover å gjøre koding for Android enda morsommere.
I den forrige artikkelen i denne serien lærte du om nullabilitet, looper og forhold i Kotlin. I denne opplæringen fortsetter vi å lære språket ved å se på utvalgs- og samlings API i Kotlin.
Et område i Kotlin er en unik type som definerer en startverdi og en sluttverdi. Med andre ord er det et intervall mellom en start og en sluttverdi. Rangene i Kotlin er stengt, noe som betyr at startverdien og sluttverdien er inkludert i serien.
Vi ser nå på forskjellige måter å skape områder i Kotlin.
...
Operatørval oneToFive = 1 ... 5
I koden ovenfor har vi opprettet et lukket område. Denne variabelen oneToFive
vil inneholde følgende verdier: 1, 2, 3, 4, 5. Vi kan sløyfe over det ved hjelp av til
loop konstruksjon.
for (n i oneToFive) print (n)
Koden ovenfor kan forkortes til:
for (n i 1 ... 5) print (n)
Vi kan også lage en rekke tegn:
val aToZ = "a" ... "z"
Variabelen Atoz
vil ha alle bokstavene i det engelske alfabetet.
rangeTo ()
FunksjonDe ...
operatør kan erstattes med rangeTo ()
utvidelsesfunksjon for å lage en rekkevidde. For eksempel kan vi også gjøre dette 1.rangeTo (5)
og det vil fortsatt ha de samme resultatene som å bruke ...
operatør som diskutert tidligere.
val oneToFive: IntRange = 1.rangeTo (5)
ned til()
FunksjonDette er en annen utvidelsesfunksjon som vil skape et område som starter fra et gitt nummer ned til en annen.
val fiveToOne = 5.downTo (1)
Vi kan endre rekkevidden ved hjelp av skritt()
funksjon. Dette vil endre deltaet mellom hvert element i området.
val oneToTenStep = 1 ... 10 trinn 2 // 1, 3, 5, 7, 9
Koden ovenfor inneholder ulige tall mellom 1 og 10.
i
OperatørDe i
Operatør brukes til å finne ut om en verdi er tilstede i et gitt område.
hvis (5 i 1 ... 10) utskrift ("Ja 5 er i området") // utskrifter "Ja 5 er i området"
I koden ovenfor sjekket vi for å se om 5 er i området 1 ... 10 ved hjelp av i
operatør. Vi kan også gjøre det motsatte ved å bruke !n
for å sjekke om 5 ikke er i området.
Samlinger brukes til å lagre grupper av relaterte objekter i minnet. I en samling kan vi hente, lagre eller organisere objektene. Kotlin tilbyr sin samlings-API som et standardbibliotek som er bygget på toppen av Java Collection API. (Vi diskuterer grensesnitt i Kotlin i et fremtidig innlegg.)
Du bør være oppmerksom på at disse grensesnittene er knyttet til implementeringen på kompileringstidspunktet. Du kan ikke se implementeringskilden i Kotlin, fordi samlingene faktisk implementeres av standard Java-samlinger som Arraylist
, Maps
, HashMap
, Settene
, HashSet
, Liste
og så videre. For å virkelig forstå samlings API i Kotlin, må du være kjent med disse grunnleggende klassene og grensesnittene i Java.
I denne delen lærer vi om Liste
, Sett
og Kart
samlinger i Kotlin. (Hvis du vil ha en oppdatering på arrays i Kotlin, vennligst besøk den første opplæringen i denne serien.)
Kotlins samlinger gir oss muligheten til å oppnå mye med bare en liten kode - i motsetning til Java, som synes å trenge mye kode for å oppnå litt! Kotlin har to varianter av samlinger: mutable og immutable. En mutable samling gir oss muligheten til å modifisere en samling ved enten å legge til, fjerne eller erstatte et element. Uendelige samlinger kan ikke endres og har ikke disse hjelpemetodene.
Vær oppmerksom på at tillegg, fjerning eller utskifting av et element i en uforanderlig samling er mulig via operatørfunksjoner (det kommer vi snart til), men dette vil ende opp med å skape en ny samling.
Iterable
InterfaceThe Kotlin Iterable
grensesnittet er øverst i samlingsklassehierarkiet. Dette grensesnittet gjør at samlinger kan representeres som en sekvens av elementer (som kan bli iterert over, naturlig).
offentlig grensesnitt Iterableoffentlig abstrakt operatør morsom iterator (): Iterator
Samling
InterfaceThe Kotlin Samling
grensesnittet utvider Iterable
grensesnitt. De Samling
grensesnittet er uforanderlig. Med andre ord har du skrivebeskyttet tilgang til samlinger. De Sett
og Liste
grensesnitt (mer om disse kort tid) i Kotlin utvide dette grensesnittet.
Noen av funksjonene og egenskapene som er tilgjengelige i Samling
grensesnittet er:
størrelse
: Denne egenskapen returnerer størrelsen på samlingen.er tom()
: returnerer sant hvis samlingen er tom eller falsk på annen måte. inneholder (element: E)
: returnerer sant hvis elementet som er angitt i argumentet, finnes i samlingen.inneholderAlle (element: samling)
: returnerer sant hvis elementet i samlingen passert som argument er tilstede i samlingen. offentlig grensesnitt samling: Iterable offentlig valstørrelse: Int offentlig moro erEmpty (): Boolsk offentlig operatør moro inneholder (element: @UnsafeVariance E): Boolsk overstyring morsom iterator (): Iterator offentlig moro inneholder alle (elementer: samling<@UnsafeVariance E>): Boolsk
MutableIterable
InterfaceDette grensesnittet i Kotlin gir oss en spesialisert, muterbar iterator fra foreldrene Iterable
grensesnitt.
offentlig grensesnitt MutableIterable: Iterable overstyre morsom iterator (): MutableIterator
MutableCollection
InterfaceDe MutableCollection
Grensesnittet i Kotlin er et spesialisert grensesnitt som gjør at samlinger kan være mutable. Med andre ord kan legge til og fjerne operasjoner utføres på en gitt samling. Dette grensesnittet utvider både Samling
grensesnitt og MutableIterable
grensesnitt allerede diskutert ovenfor. De MutableSet
og MutableList
grensesnitt (vi kommer til dem kort tid) i Kotlin utvide dette grensesnittet. Funksjonene som er tilgjengelige i dette grensesnittet, bortsett fra de som er tilgjengelige i sine foreldre, er:
legg til (element: E)
: legger elementet som et argument til samlingen og returnerer sant hvis vellykket eller falskt hvis samlingen ikke støtter duplikater og elementet er allerede til stede.fjern (element: E)
: Fjerner elementet bestått som et argument fra samlingen. Returnerer sant hvis vellykket eller falskt hvis det ikke var tilstede i samlingen.addAll (elementer: Samling)
: legger til alle elementene i samlingen bestått som argumenter til samlingen. Returnerer sant hvis vellykket eller falskt hvis ingenting ble lagt til.removeAll (elementer: Samling)
: fjerner alle elementene som er tilstede i samlingen bestått som argumenter. Returnerer sant hvis vellykket eller falskt hvis ingenting ble fjernet.beholdAll (elementer: Samling)
: beholder bare elementene som er tilstede i samlingene som er gått som argumenter. Returnerer sant hvis vellykket eller falskt hvis ingenting ble beholdt. klar()
: fjerner alle elementer fra denne samlingen.offentlig grensesnitt MutableCollection: Innsamling , MutableIterable overstyre morsom iterator (): MutableIterator offentlig moro legge til (element: E): Boolsk offentlig moro fjerne (element: E): Booleansk offentlig moro addAll (elementer: Samling ): Boolsk offentlig moro fjerneAlle (elementer: Samling ): Boolsk offentlig moro beholdeAlle (elementer: Samling ): Boolsk offentlig morsomhet (): Enhet
Nå har du lært om de beste grensesnittene i kollektivklassehierarkiet i Kotlin, la oss se på hvordan Kotlin håndterer samlinger som Lister, sett og kart i den gjenværende delen av opplæringen.
En liste er en bestilt samling av elementer. Dette er en populær samling som er mye brukt. La oss se på forskjellige måter å lage en liste på i Kotlin.
liste over()
FunksjonI Kotlin kan vi lage en uforanderlig (skrivebeskyttet) liste ved hjelp av liste over()
hjelpefunksjon fra Kotlin standardbiblioteket. Denne funksjonen returnerer en Kotlin Liste
grensesnitt type.
var tall: Liste= listOf (1, 2, 3, 4, 5) var navn: Liste = listOf ("Chike", "Nnamdi", "Mgbemena") for (navn i navn) println (navn)
Kjører koden over vil skrive ut:
Chike Nnamdi Mgbemena
Videre kan vi passere verdier av forskjellige typer inn i liste over()
Som argumenter og resultatet vil fortsatt fungere, vil det være en liste over blandet type.
var listMixedTypes = listOf ("Chike", 1, 2.445, s)) // vil fortsatt samle
emptyList ()
FunksjonDenne funksjonen oppretter bare en tom, uforanderlig liste og returnerer en Kotlin Liste
grensesnitt type.
Val emptyList: List= tomliste ()
listOfNotNull ()
FunksjonDenne funksjonen oppretter en ny, uforanderlig liste som bare inneholder elementer som ikke er null. Legg merke til at denne funksjonen returnerer en Kotlin Liste
grensesnitt type også.
Val nonNullsList: Liste= listOfNotNull (2, 45, 2, null, 5, null)
De Liste
grensesnittet fra Kotlin standardbiblioteket utvider bare Samling
grensesnitt. Med andre ord er det eneste foreldre som er Samling
grensesnitt. Det overstyrer alle funksjonene i overordnet grensesnitt for å imøtekomme sine spesielle behov og definerer også sine egne funksjoner, for eksempel:
få (indeks: Int)
: en funksjonsoperatør som returnerer elementet til den angitte indeksen. indexOf (element: E)
: Returnerer indeksen for den første forekomsten av elementet som er bestått som et argument i listen, eller -1 hvis ingen er funnet.lastIndexOf (element: E)
: Returnerer indeksen for den siste forekomsten av elementet som er bestått som et argument i listen, eller -1 hvis ingen er funnet. listIterator ()
: Returnerer en liste iterator over elementene i listen.underliste (fromIndex: Int, toIndex: Int)
: Returnerer en liste som inneholder delen av listen mellom de angitte start- og sluttindeksene. println (names.size) // 3 println (names.get (0)) // "Chike" println (names.indexOf ("Mgbemena")) // 2 println (names.contains ("Nnamdi")) // 'ekte'
arrayListOf ()
FunksjonDette skaper en gjørbar liste og returnerer en Java Arraylist
type.
val strengliste: ArrayList= arrayListOf ("Hei du der")
mutableListOf ()
FunksjonFor å legge til, fjerne eller erstatte verdier i en liste, må vi gjøre listen en gjørbar. Vi kan konvertere en uforanderlig liste til en mutable ved å ringe funksjonen toMutableList ()
på listen. Vær imidlertid oppmerksom på at denne metoden vil opprette en ny liste.
var mutableNames1 = names.toMutableList () mutableNames1.add ("Ruth") // nå mutable og lagt til "Ruth" til liste
For å lage en gjørbar liste av en viss type fra grunnen, f.eks. string
, vi bruker mutableListOf
, mens for blandede typer kan vi bare bruke mutableListOf ()
funksjonen i stedet.
// en mutabel liste av en bestemt type, f.eks. String val mutableListNames: MutableList= mutableListOf ("Josh", "Kene", "Sanya") mutableListNames.add ("Mary") mutableListNames.removeAt (1) mutableListNames [0] = "Oluchi" // erstatter elementet i indeks 0 med "Oluchi" // a mutable liste over blandede typer val mutableListMixed = mutableListOf ("BMW", "Toyota", 1, 6,76, 'v')
Noen av disse funksjonene vil returnere a MutableList
Kotlin-grensesnitt type. Dette grensesnittet utvider både MutableCollection
og Liste
grensesnitt diskutert tidligere i denne delen. De MutableList
grensesnitt legger til metoder for gjenfinning eller substitusjon av et element basert på sin posisjon:
sett (indeks: Int, element: E)
: erstatter et element i listen med et annet element. Dette returnerer elementet tidligere i den angitte posisjonen.legg til (indeks: Int, element: E)
: legger inn et element på den angitte indeksen. removeAt (indeks: Int)
: blir kvitt elementet ved en bestemt indeks. Val mutableListFood: MutableList= mutableListOf ("Rice & stew", "Jollof rice", "Eba & Egusi", "Fried rice") mutableListFood.remove ("Fried rice") mutableListFood.removeAt (0) mutableListFood.set (0, "Beans") mutableListFood. legg til (1, "Brød og te") for (foodName i mutableListFood) println (foodName)
Kjører koden ovenfor, produserer vi følgende resultat:
Bønner Brød og te Eba & Egusi
Merk at alle disse funksjonene lager en Java Arraylist
Bak scenen.
Et sett er en uordnet samling av unike elementer. Med andre ord, det kan ikke ha noen duplikater! La oss se på noen av de forskjellige måtene å skape et sett i Kotlin. Hver av disse oppretter en annen datastruktur, som hver er optimalisert for en bestemt type oppgave.
setof ()
FunksjonFor å lage et uforanderlig (skrivebeskyttet) sett i Kotlin, kan vi bruke funksjonen setof ()
, som returnerer en Kotlin Sett
grensesnitt type.
// lager et uforanderlig sett av blandede typer val mixedTypesSet = setOf (2, 4.454, "how", "langt", "c") // vil kompilere var intSet: Set= setOf (1, 3, 4) // kun heltallstyper tillatt
Legg merke til at Kotlin Sett
grensesnittet utvider kun Kotlin Samling
grensesnitt og overstyrer alle egenskapene som er tilgjengelige i sin overordnede.
hashSetOf ()
Funksjon Bruker hashSetOf ()
funksjonen skaper en Java HashSet
samling som lagrer elementer i et hashbord. Fordi denne funksjonen returnerer en Java HashSet
type, kan vi legge til, fjerne eller slette elementer i settet. Med andre ord, det er mutable.
val intsHashSet: java.util.HashSet= hashSetOf (1, 2, 6, 3) intsHashSet.add (5) intsHashSet.remove (1)
sortedSetOf ()
FunksjonBruker sortedSetOf ()
funksjonen skaper en Java TreeSet
samling bak scenene, som bestiller elementer basert på deres naturlige bestilling eller av en komparator. Dette settet er også omgjengelig.
val intsSortedSet: java.util.TreeSet= sortedSetOf (4, 1, 7, 2) intsSortedSet.add (6) intsSortedSet.remove (1) intsSortedSet.clear ()
linkedSetOf ()
FunksjonDenne funksjonen returnerer en Java LinkedHashSet
type. Dette mutable settet opprettholder en koblet liste over oppføringene i settet, i den rekkefølgen de ble satt inn i.
val intsLinkedHashSet: java.util.LinkedHashSet= linkedSetOf (5, 2, 7, 2, 5) // 5, 2, 7 intsLinkedHashSet.add (4) intsLinkedHashSet.remove (2) intsLinkedHashSet.clear ()
mutableSetOf ()
FunksjonVi kan bruke mutableSetOf ()
for å lage et gjensidig sett. Denne funksjonen returnerer en Kotlin MutableSet
grensesnitt type. Bak kulissene skaper denne funksjonen bare en Java LinkedHashSet
.
// lager et muterbart sett med int typer bare val intsMutableSet: MutableSet= mutableSetOf (3, 5, 6, 2, 0) intsMutableSet.add (8) intsMutableSet.remove (3)
De MutableSet
grensesnittet utvider både MutableCollection
og Sett
grensesnitt.
Kart assosierer nøkler til verdier. Nøklene må være unike, men de tilhørende verdiene trenger ikke å være. På den måten kan hver nøkkel brukes til å identifisere den tilknyttede verdien unikt, siden kartet sørger for at du ikke kan ha dupliserte nøkler i samlingen. Bak kulissene bruker Kotlin Java Kart
samling for å implementere sin kartsamlingstype.
mapOf ()
FunksjonÅ skape en uforanderlig eller skrivebeskyttet Kart
samling i Kotlin, bruker vi mapOf ()
funksjon. Vi lager et kart med denne funksjonen ved å gi den en liste over par. Den første verdien er nøkkelen, og den andre er verdien. Å ringe denne funksjonen returnerer en Kotlin Kart
grensesnitt type.
val callingCodesMap: Kart= mapOf (234 til "Nigeria", 1 til "USA", 233 til "Ghana") for ((nøkkel, verdi) i callingCodesMap) println ("$ nøkkelen er kallekoden for $ verdi") skriv ut (callingCodesMap [234]) // Nigeria
Kjører koden ovenfor vil gi resultatet:
234 er kallekoden for Nigeria 1 er telefonnummeret til USA 233 er telefonnummeret for Ghana
I motsetning til Liste
og Sett
grensesnitt i Kotlin som strekker seg Samling
grensesnittet, Kart
grensesnittet utvider ikke noe i det hele tatt. Noen av egenskapene og funksjonene som er tilgjengelige i dette grensesnittet er:
størrelse
: Denne egenskapen returnerer størrelsen på kartsamlingen.er tom()
: returnerer sant hvis kartet er tomt eller falskt ellers.inneholderKey (nøkkel: K)
: returnerer sant hvis kartet inneholder nøkkelen i argumentet. inneholderValue (verdi: V)
: returnerer sant hvis kartet kartlegger en eller flere nøkler til verdien som er bestått som et argument.få (nøkkel: K)
: returnerer verdien som matcher den gitte nøkkelen eller nullen hvis ingen er funnet. nøkler
: Denne egenskapen returnerer en uforanderlig Sett
av alle nøklene i kartet.verdier
: returnerer en uforanderlig Samling
av alle verdiene i kartet.mutableMapOf ()
FunksjonDe mutableMapOf ()
funksjonen skaper et gjørbart kart for oss slik at vi kan legge til og fjerne elementer i kartet. Dette returnerer en Kotlin MutableMap
grensesnitt type.
Val currenciesMutableMap: MutableMap= mutableMapOf ("Naira" til "Nigeria", "Dollars" til "USA", "Pounds" til "UK") println ("Land er $ currenciesMutableMap.values") // Land er [Nigeria, USA, Storbritannia ] println ("Valuta er $ currenciesMutableMap.keys") // Valuta er [Naira, Dollars, Pounds] currenciesMutableMap.put ("Cedi", "Ghana") valutaerMutableMap.remove ("Dollars")
De MutableMap
grensesnittet utvider ikke MutableCollection
grensesnitt; det er bare foreldre er Kart
grensesnitt. Det overstyrer nøkler
, innganger
og verdier
egenskaper fra overordnet grensesnitt for å omdefinere dem. Her er noen av de ekstra funksjonene som er tilgjengelige i MutableMap
grensesnitt:
put (nøkkel: K, verdi: V)
: legger inn nøkkelen, verdiparet i kartet. Dette vil returnere forrige verdi knyttet til nøkkelen eller null hvis nøkkelen ikke ble brukt tidligere. fjern (tast: K)
: fjerner nøkkelen og den tilknyttede verdien fra kartet. putt alle
(fra: Kart)
: oppdaterer kartet med alle dataene fra det oppgitte kartet. Nye nøkler vil bli lagt til, og eksisterende nøkler vil bli oppdatert med nye verdier. klar()
: fjerner alle elementene fra kartet. Vi kan få verdien for en nøkkel ved hjelp av få()
funksjon. Vi kan også bruke firkantbrakettnotasjon som en snarvei for få()
.
print (currenciesMutableMap.get ("Nigeria")) // vil skrive ut Naira-utskrift (currenciesMutableMap ["Nigeria"]) // vil skrive ut Naira
hashMapOf ()
FunksjonVed hjelp av denne funksjonen returneres en Java HashMap
type som er mutable. De HashMap
klassen bruker et hashbord for å implementere Java Kart
grensesnitt.
Val personsHashMap: java.util.HashMap= hashMapOf (1 til "Chike", 2 til "John", 3 til "Emeka") personsHashMap.put (4, "Chuka") personerHashMap.remove (2) print (personsHashMap [1]) // vil skrive ut Chike
linkedHashMap ()
FunksjonDenne funksjonen returnerer en Java LinkedHashMap
type som er mutable. De LinkedHashMap
klassen utvider Java HashMap
og opprettholder en koblet liste over oppføringene i kartet i den rekkefølgen de ble satt inn i.
val postkoderHashMap: java.util.LinkedHashMap= "NG" til "Nigeria", "AU" til "Australia", "CA" til "Canada") postkoderHashMap.put ("NA", "Namibia") postkoderHashMap.remove ("AU") postkoderHashMap.get ("CA") // Canada
sortedMapOf ()
FunksjonDenne funksjonen returnerer en Java SortedMap
type som er mutable. Java SortedMap
klassen ser at oppføringene i kartet opprettholdes i en stigende nøkkelordre.
Val personsSortedMap: java.util.SortedMap= sortedMapOf (2 til "Chike", 1 til "John", 3 til "Emeka") personsSortedMap.put (7, "Adam") personsSortedMap.remove (3)
Husk at implementeringen av disse samlingsgrensesnittene i Kotlin skjer ved kompileringstid.
Kotlin gir oss mange nyttige operatørfunksjoner kalt utvidelsesfunksjoner som kan påberopes på samlinger. La oss ta en titt på noen av de mest nyttige.
siste()
FunksjonDenne operatørfunksjonen returnerer det siste elementet i en samling, for eksempel en liste eller et sett. Vi kan også levere et predikat for å søke i et delsett av elementer.
val strengliste: Liste= listOf ("in", "the", "club") print (stringList.last ()) // vil skrive ut "club" // gitt en predikatutskrift (stringList.last it.length == 3) / / vil skrive ut "valget intSet: Set = setOf (3, 5, 6, 6, 6, 3) print (intSet.last ()) // vil skrive ut 6
først()
FunksjonDenne operatørfunksjonen returnerer det første elementet når det påkreves på en samling, for eksempel en liste eller et sett. Hvis et predikat er gitt, bruker det deretter predikatet til å begrense operasjonen til en delmengde av elementer.
print (stringList.first ()) // vil skrive ut "i" print (intSet.first ()) // vil skrive ut 3
max ()
FunksjonHvis du bruker denne operatørfunksjonen på en samling som en liste eller et sett, returneres det største elementet, eller null hvis ikke det største elementet er funnet.
Val intList: Liste= listOf (1, 3, 4) print (intList.max ()) // vil skrive ut 4 utskrift (intSet.max ()) // vil skrive ut 6
miste()
FunksjonKaller denne operatørfunksjonen returnerer en ny liste eller et sett som inneholder alle elementene unntatt de første n-elementene.
print (stringList.drop (2)) // vil skrive ut "klubb"
i tillegg til()
FunksjonDenne operatørfunksjonen returnerer en samling som inneholder alle elementene i originalen og deretter det gitte elementet hvis det ikke allerede er i samlingen. Dette vil ende med å opprette en ny liste i stedet for å endre listen.
print (intList.plus (6)) // vil skrive ut [1, 3, 4, 6]
minus()
FunksjonDet motsatte av i tillegg til()
funksjonen er minus()
funksjon. Den returnerer en samling som inneholder alle elementene i det opprinnelige settet, bortsett fra det gitte elementet. Dette endes også med å opprette en ny liste i stedet for å endre listen.
print (intList.minus (3)) // vil skrive ut [1, 4]
gjennomsnitt()
FunksjonÅ ringe denne operatørfunksjonen returnerer et gjennomsnittlig antall elementer i samlingen.
print (intList.average ()) // vil skrive ut 2.6666666666666665
De fleste av disse utvidelsesfunksjonene er tilgjengelige i Kotlin-samlingenes standardbibliotek. Det anbefales at du sjekker ut dokumentasjonen for å lære om de andre.
I denne opplæringen har du lært om utvalgs- og samlings API i Kotlins programmeringsspråk. I neste opplæring i Kotlin From Scratch-serien blir du introdusert til funksjoner i Kotlin. Ser deg snart!
For å lære mer om Kotlin-språket, anbefaler jeg at du besøker Kotlin-dokumentasjonen. Eller sjekk ut noen av våre andre Android-apputviklingsposter her på Envato Tuts!