Brug af par i Java

1. Oversigt

I denne hurtige artikel diskuterer vi det meget nyttige programmeringskoncept kendt som en Par. Par giver en bekvem måde at håndtere enkel nøgle til værdiforening og er især nyttige, når vi vil returnere to værdier fra en metode.

En simpel implementering af en Par er tilgængelig i de centrale Java-biblioteker. Ud over det har visse tredjepartsbiblioteker som Apache Commons og Vavr eksponeret denne funktionalitet i deres respektive API'er.

2. Core Java-implementering

2.1. Det Par Klasse

Det Par klasse kan findes i javafx.util pakke. Konstruktøren af ​​denne klasse tager to argumenter, en nøgle og dens tilsvarende værdi:

Parpar = nyt par (1, "Én"); Heltalsnøgle = pair.getKey (); Strengværdi = pair.getValue (); 

Dette eksempel illustrerer et simpelt Heltal til Snor kortlægning ved hjælp af Pair-konceptet.

Som vist er nøglen i par objekt hentes ved at påkalde a getKey () metode, mens værdien hentes ved at ringe getValue ().

2.2. AbstractMap.SimpleEntry og AbstractMap.SimpleImmutableEntry

SimpleEntry er defineret som en indlejret klasse inde i AbstraktKort klasse. For at oprette et objekt af denne type kan vi give konstruktøren en nøgle og værdi:

AbstractMap.SimpleEntry-indgang = ny AbstractMap.SimpleEntry (1, "en"); Heltalsnøgle = entry.getKey (); Strengværdi = entry.getValue ();

Nøglen og værdien kan tilgås via standardmetoder for getter og setter.

Derudover er AbstraktKort klasse indeholder også en indlejret klasse, der repræsenterer et uforanderligt par: SimpleImmutableEntry klasse:

AbstractMap.SimpleImmutableEntry entry = new AbstractMap.SimpleImmutableEntry (1, "one");

Dette fungerer på samme måde som den mutable pair-klasse, bortset fra at værdien af ​​parret ikke kan ændres. Forsøg på at gøre det vil resultere i en Ikke-understøttetOperationException.

3. Apache Commons

I Apache Commons-biblioteket kan vi finde Par klasse i org.apache.commons.lang3.tuple pakke. Dette er en abstrakt klasse, så den kan ikke instantieres direkte.

Vi kan her finde to underklasser - der repræsenterer uforanderlige og foranderlige par: ImmutablePair og MutablePair.

Begge implementeringer har adgang til nøgle / værdi getter / setter metoder:

ImmutablePair-par = nyt ImmutablePair (2, "To"); Heltalsnøgle = pair.getKey (); Strengværdi = pair.getValue ();

Ikke overraskende et forsøg på at påberåbe sig setValue () på den Uforanderligt par resulterer i en Ikke-understøttetOperationException.

Men operationen er fuldstændig gyldig til en ændret implementering:

Parpar = nyt MutablePair (3, "Tre"); pair.setValue ("Nye tre"); 

4. Vavr

I Vavr-biblioteket leveres parfunktionaliteten af ​​den uforanderlige Tuple2 klasse:

Tuple2-par = nyt Tuple2 (4, "Fire"); Heltalsnøgle = par._1 (); Strengværdi = par._2 (); 

I denne implementering kan vi ikke ændre objektet efter oprettelsen, så mutationsmetoder returnerer en ny instans, der inkluderer den medfølgende ændring:

tuplePair = pair.update2 ("New Four"); 

5. Alternativ I - Enkel beholderklasse

Enten ved brugerpræference eller i fravær af nogen af ​​de førnævnte biblioteker skaber en standard løsning til parfunktionaliteten en simpel beholderklasse, der omslutter de ønskede returværdier.

Den største fordel her er evnen til at give vores navn, som hjælper med at undgå at have den samme klasse, der repræsenterer forskellige domæneobjekter:

offentlig klasse CustomPair {privat strengnøgle; privat strengværdi; // standard getters og setter}

6. Alternativ II - Arrays

En anden almindelig løsning er ved at bruge et simpelt array med to elementer for at opnå lignende resultater:

privat objekt [] getPair () {// ... returner nyt objekt [] {nøgle, værdi}; }

Typisk er nøglen placeret ved indeks nul i arrayet, mens dens tilsvarende værdi er placeret i indeks et.

7. Konklusion

I denne vejledning har vi diskuteret begrebet Par i Java og de forskellige implementeringer, der er tilgængelige i core Java såvel som andre tredjepartsbiblioteker.

Som altid kan du finde koden, der understøtter denne vejledning på GitHub.


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