Introduksjon til Javatuples

1. Oversikt

En tuple er en samling av flere elementer som kan eller ikke er relatert til hverandre. Med andre ord kan tupler betraktes som anonyme gjenstander.

For eksempel er ["RAM", 16, "Astra"] en tuple som inneholder tre elementer.

I denne artikkelen vil vi se raskt på et veldig enkelt bibliotek som lar oss jobbe med de tuplebaserte datastrukturene, kalt javatuples.

2. Innebygd Javatuples Klasser

Dette biblioteket gir oss ti forskjellige klasser som vil være tilstrekkelig for de fleste av våre krav knyttet til tupler:

  • Enhet
  • Par
  • Triplett
  • Kvartett
  • Kvintett
  • Sekstett
  • Septet
  • Oktett
  • Ennead
  • Tiår

I tillegg til klassene ovenfor er det to ekstra klasser, KeyValue og LabelValue, som gir funksjoner som ligner på Par, men avviker i semantikk.

I henhold til det offisielle nettstedet, alle klassene ijavatuples er typesafe og uforanderlige. Hver av tupleklassen implementerer Iterabel, Serialiserbar, og Sammenlignelig grensesnitt.

3. Legge til Maven-avhengighet

La oss legge til Maven-avhengigheten til vår pom.xml:

 org.javatuples javatuples 1.2 

Sjekk Central Maven-depotet for den nyeste versjonen.

4. Lage tupler

Å lage en tuple er veldig enkelt. Vi kan bruke de tilsvarende konstruktørene:

Parpar = nytt par ("Et par", 55);

Det er også litt mindre ordentlig og semantisk elegant måte å skape en tuple på:

Triplet triplet = Triplet.with ("hallo", 23, 1.2);

Vi kan også lage tupler fra en Iterabel:

List listOfNames = Arrays.asList ("john", "doe", "anne", "alex"); Kvartettkvartett = Quartet.fromCollection (collectionOfNames);

Vær oppmerksom på at antall varer i samlingen skal samsvare med typen tupel som vi ønsker å lage. For eksempel kan vi ikke opprette en Kvintett ved å bruke samlingen ovenfor, da den krever nøyaktig fem elementer. Det samme gjelder for alle andre tupleklasser som har høyere orden enn Kvintett.

Imidlertid kan vi lage en lavere ordens tuple som Par eller a Triplett ved å bruke ovennevnte samling ved å spesifisere en startindeks i fraIterable () metode:

Pair pairFromList = Pair.fromIterable (listOfNames, 2);

Ovennevnte kode vil resultere i å opprette en Par inneholder "anne”Og”alex“.

Tuples kan også enkelt opprettes fra alle matriser:

String [] names = new String [] {"john", "doe", "anne"}; Triplet triplet2 = Triplet.fromArray (navn);

5. Få verdier fra tupler

Hver klasse i javatuples har en getValueX () metode for å hente verdiene fra tupler, hvor X spesifiserer rekkefølgen på elementet inne i tupelen. Som indeksene i matriser, verdien av X starter fra null.

La oss lage en ny kvartett og hente noen verdier:

Kvartettkvartett = Quartet.with ("john", 72.5, 32, "1051 SW"); Strengnavn = kvartett.getValue0 (); Hele alder = kvartett.getValue2 (); assertThat (name) .isEqualTo ("john"); hevder at (alder) .isEqualTo (32);

Som vi kan se, er posisjonen til “john”Er null,“72.5”Er en, og så videre.

Merk at getValueX () metodene er typesikre. Det betyr at ingen avstøpning er nødvendig.

Et alternativ til dette er getValue (int pos) metode. Det tar en nullbasert posisjon av elementet som skal hentes. Denne metoden er ikke typesikker og krever eksplisitt casting:

Kvartettkvartett = Quartet.with ("john", 72.5, 32, "1051 SW"); String name = (String) quartet.getValue (0); Heltalder = (Heltall) kvartett.getValue (2); assertThat (name) .isEqualTo ("john"); hevder at (alder) .isEqualTo (32);

Vær oppmerksom på at klassene KeyValue og LabelValue har tilsvarende metoder getKey () / getValue () og getLabel () / getValue ().

6. Sette verdier til tupler

Lik getValueX (), har alle klasser i javatuples setAtX () metoder. En gang til, X er nullbaserte posisjoner for elementet vi vil sette:

Pair john = Pair.with ("john", 32); Par alex = john.setAt0 ("alex"); assertThat (john.toString ()). isNotEqualTo (alex.toString ());

Det viktige her er at returtypen av setAtX () metoden er selve tupletypen. Dette er fordi javatuples er uforanderlige. Hvis du setter en ny verdi, blir den opprinnelige forekomsten intakt.

7. Legge til og fjerne elementer fra tuplene

Vi kan enkelt legge til nye elementer i tuplene. Dette vil imidlertid resultere i at en ny tuple av en ordre høyere blir opprettet:

Par par1 = Pair.with ("john", 32); Triplet triplet1 = pair1.add ("1051 SW"); assertThat (triplet1.contains ("john")); assertThat (triplet1.contains (32)); assertThat (triplet1.contains ("1051 SW"));

Det er klart fra eksemplet ovenfor at å legge til ett element i a Par vil skape et nytt Triplett. Tilsvarende legger du til ett element i a Triplett vil skape et nytt Kvartett.

Eksemplet ovenfor viser også bruken av inneholder () metoden som tilbys av alle klassene i javatuples. Dette er en veldig praktisk metode for å verifisere om tupelen inneholder en gitt verdi.

Det er også mulig å legge til en tuple til en annen ved hjelp av legge til() metode:

Parpar1 = Par.med ("john", 32); Pair pair2 = Pair.with ("alex", 45); Kvartettkvartett2 = pair1.add (pair2); assertThat (quartet2.containsAll (pair1)); assertThat (quartet2.containsAll (pair2));

Legg merke til bruken av inneholderAlle () metode. Det kommer tilbake ekte hvis alle elementene i par1 er til stede i kvartett2.

Som standard er legge til() metoden legger til elementet som et siste element i tupelen. Det er imidlertid mulig å legge til elementet i en gitt posisjon ved hjelp av addAtX () metode, hvor X er den nullbaserte posisjonen der vi vil legge til elementet:

Parpar1 = Par.med ("john", 32); Triplet triplet2 = pair1.addAt1 ("1051 SW"); assertThat (triplet2.indexOf ("john")). er EqualTo (0); assertThat (triplet2.indexOf ("1051 SW")). er EqualTo (1); assertThat (triplet2.indexOf (32)). er EqualTo (2);

Dette eksemplet legger til String i posisjon 1, som deretter bekreftes av oversikt over() metode. Vær oppmerksom på forskjellen i rekkefølge for typene for Par og Triplett etter samtalen til addAt1 () metodeanrop.

Vi kan også legge til flere elementer ved hjelp av noen av legge til() eller addAtX () metoder:

Parpar1 = Par.med ("john", 32); Kvartettkvartett1 = pair1.add ("alex", 45); assertThat (kvartett1.containsAll ("alex", "john", 32, 45));

For å fjerne et element fra tupelen, kan vi bruke removeFromX () metode. En gang til, X spesifiserer den nullbaserte posisjonen til elementet som skal fjernes:

Par par1 = Pair.with ("john", 32); Enhetsenhet = pair1.remFrom0 (); assertThat (unit.contains (32));

8. Konvertering av tuples til Liste / oppstilling

Vi har allerede sett hvordan vi konverterer en Liste til en tuple. La oss nå se hot å konvertere en tuple til a Liste:

Kvartettkvartett = Quartet.with ("john", 72.5, 32, "1051 SW"); Listeliste = kvartett.toListe (); assertThat (list.size ()). erEqualTo (4);

Det er ganske enkelt. Det eneste du må merke deg her er at vi alltid vil få en Liste, selv om tupelen inneholder samme type elementer.

Til slutt, la oss konvertere tupelen til en matrise:

Kvartettkvartett = Quartet.with ("john", 72.5, 32, "1051 SW"); Objekt [] array = quartet.toArray (); assertThat (array.length) .isEqualTo (4);

Klar nok, den toArray () metoden returnerer alltid en Gjenstand[].

9. Konklusjon

I denne artikkelen har vi utforsket javatuples-biblioteket og observert dets enkelhet. Det gir elegant semantikk og er veldig enkelt å bruke.

Pass på at du sjekker ut den komplette kildekoden for denne artikkelen på GitHub. Den komplette kildekoden inneholder litt flere eksempler enn de som er dekket her. Etter å ha lest denne artikkelen, bør de ekstra eksemplene være enkle å forstå.


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