Bruke par i Java

1. Oversikt

I denne raske artikkelen diskuterer vi det svært nyttige programmeringskonseptet kjent som a Par. Par gir en praktisk måte å håndtere enkel nøkkel til verditilknytning og er spesielt nyttige når vi ønsker å returnere to verdier fra en metode.

En enkel implementering av en Par er tilgjengelig i de viktigste Java-bibliotekene. Utover det har visse tredjepartsbiblioteker som Apache Commons og Vavr eksponert denne funksjonaliteten i sine respektive APIer.

2. Core Java Implementation

2.1. De Par Klasse

De Par klassen finner du i javafx.util pakke. Konstruktøren av denne klassen tar to argumenter, en nøkkel og dens tilsvarende verdi:

Parpar = nytt par (1, "En"); Heltallnøkkel = pair.getKey (); Strengverdi = pair.getValue (); 

Dette eksemplet illustrerer en enkel Heltall til String kartlegging ved bruk av Pair-konseptet.

Som vist er nøkkelen i par gjenstand hentes ved å påkalle a getKey () metode mens verdien hentes ved å ringe getValue ().

2.2. AbstractMap.SimpleEntry og AbstractMap.SimpleImmutableEntry

SimpleEntry er definert som en nestet klasse i AbstractMap klasse. For å lage et objekt av denne typen kan vi gi en nøkkel og verdi til konstruktøren:

AbstractMap.SimpleEntry entry = new AbstractMap.SimpleEntry (1, "one"); Heltallnøkkel = entry.getKey (); Strengverdi = entry.getValue ();

Nøkkelen og verdien kan nås via standard getter- og settermetoder.

I tillegg har AbstractMap klasse inneholder også en nestet klasse som representerer et uforanderlig par: SimpleImmutableEntry klasse:

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

Dette fungerer på samme måte som den mutable parklassen, bortsett fra at verdien til paret ikke kan endres. Forsøk på å gjøre det vil resultere i en Ikke-støttetOperationException.

3. Apache Commons

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

Vi finner her to underklasser - som representerer uforanderlige og foranderlige par: ImmutablePair og MutablePair.

Begge implementeringene har tilgang til nøkkel / verdi-getter / setter-metoder:

ImmutablePair-par = nytt ImmutablePair (2, "To"); Heltallnøkkel = pair.getKey (); Strengverdi = pair.getValue ();

Ikke overraskende et forsøk på å påberope seg setValue () Uforanderlig par resulterer i en Ikke-støttetOperationException.

Men operasjonen er helt gyldig for en foranderlig implementering:

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

4. Vavr

I Vavr-biblioteket leveres parfunksjonaliteten av det uforanderlige Tuple2 klasse:

Tuple2-par = ny Tuple2 (4, "Fire"); Heltallnøkkel = par._1 (); Strengverdi = par._2 (); 

I denne implementeringen kan vi ikke endre objektet etter opprettelsen, så mutasjonsmetoder returnerer en ny forekomst som inkluderer den angitte endringen:

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

5. Alternativ I - Enkel beholderklasse

Enten ved brukerinnstillinger eller i fravær av noen av de nevnte bibliotekene, skaper en standard løsning for parfunksjonaliteten en enkel beholderklasse som bryter inn ønskede returverdier.

Den største fordelen her er evnen til å gi navnet vårt som hjelper til med å unngå å ha samme klasse som representerer forskjellige domeneobjekter:

offentlig klasse CustomPair {privat strengnøkkel; privat strengverdi; // standard getters og setters}

6. Alternativ II - Arrays

En annen vanlig løsning er å bruke en enkel matrise med to elementer for å oppnå lignende resultater:

privat objekt [] getPair () {// ... returner nytt objekt [] {nøkkel, verdi}; }

Vanligvis er nøkkelen plassert ved indeksen null i matrisen mens den tilsvarende verdien ligger i indeksen én.

7. Konklusjon

I denne veiledningen har vi diskutert begrepet Par i Java og de forskjellige implementeringene som er tilgjengelige i kjerne-Java, så vel som andre tredjepartsbiblioteker.

Som alltid kan du finne koden som støtter denne opplæringen på GitHub.