Utilizarea perechilor în Java

1. Prezentare generală

În acest articol rapid, discutăm conceptul de programare extrem de util cunoscut sub numele de Pair . Perechile oferă o modalitate convenabilă de gestionare a asocierii cheii simple a valorii și sunt deosebit de utile atunci când dorim să returnăm două valori dintr-o metodă.

O implementare simplă a unei perechi este disponibilă în bibliotecile Java de bază. Dincolo de aceasta, anumite biblioteci terțe, cum ar fi Apache Commons și Vavr, au expus această funcționalitate în API-urile lor respective.

2. Implementarea Java de bază

2.1. Pereche Clasa

Pereche Clasa poate fi găsită în javafx.util pachet. Constructorul acestei clase ia două argumente, o cheie și valoarea sa corespunzătoare:

Pair pair = new Pair(1, "One"); Integer key = pair.getKey(); String value = pair.getValue(); 

Acest exemplu ilustrează o simplă cartografiere între întreg și șir utilizând conceptul Pair.

După cum se arată, cheia din obiectul pereche este recuperată prin invocarea unei metode getKey () în timp ce valoarea este recuperată apelând getValue ().

2.2. AbstractMap.SimpleEntry și AbstractMap.SimpleImmutableEntry

SimpleEntry este definit ca o clasă imbricată în clasa AbstractMap . Pentru a crea un obiect de acest tip putem furniza o cheie și o valoare constructorului:

AbstractMap.SimpleEntry entry = new AbstractMap.SimpleEntry(1, "one"); Integer key = entry.getKey(); String value = entry.getValue();

Cheia și valoarea pot fi accesate prin metode standard de setter și getter.

În plus, clasa AbstractMap conține, de asemenea, o clasă imbricată care reprezintă o pereche imuabilă: clasa SimpleImmutableEntry :

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

Acest lucru funcționează într-un mod similar cu clasa de perechi modificabile, cu excepția faptului că valoarea perechii nu poate fi modificată. Încercarea de a face acest lucru va duce la o excepție UnsupportedOperationExperation .

3. Apache Commons

În biblioteca Apache Commons, putem găsi clasa Pair în pachetul org.apache.commons.lang3.tuple . Aceasta este o clasă abstractă, deci nu poate fi instanțiată direct.

Putem găsi aici, două subclase - reprezentând perechi imuabile și mutabile: Imm utablePair și MutablePair.

Ambele implementări au acces la metodele cheie / valorificare / setare:

ImmutablePair pair = new ImmutablePair(2, "Two"); Integer key = pair.getKey(); String value = pair.getValue();

Deloc surprinzător, o încercare de a invoca SetValue () pe ImmutablePair rezultatele într - un UnsupportedOperationException.

Dar operațiunea este în întregime valabilă pentru o implementare mutabilă:

Pair pair = new MutablePair(3, "Three"); pair.setValue("New Three"); 

4. Vavr

În biblioteca Vavr, funcționalitatea pereche este asigurată de clasa imuabilă Tuple2 :

Tuple2 pair = new Tuple2(4, "Four"); Integer key = pair._1(); String value = pair._2(); 

În această implementare, nu putem modifica obiectul după creare, deci metodele de mutare returnează o nouă instanță care include modificarea furnizată:

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

5. Alternativa I - Clasa simplă de containere

Fie după preferința utilizatorului, fie în absența oricăreia dintre bibliotecile menționate anterior, o soluție standard pentru funcționalitatea pereche creează o clasă simplă de containere care împachetează valorile de returnare dorite.

Cel mai mare avantaj aici este abilitatea de a furniza numele nostru, care ajută la evitarea ca aceeași clasă să reprezinte diferite obiecte de domeniu:

public class CustomPair { private String key; private String value; // standard getters and setters }

6. Alternativa II - Matrice

O altă soluție obișnuită este utilizarea unui tablou simplu cu două elemente pentru a obține rezultate similare:

private Object[] getPair() { // ... return new Object[] {key, value}; }

De obicei, cheia este situată la indexul zero al matricei, în timp ce valoarea sa corespunzătoare este situată la indexul unu.

7. Concluzie

În acest tutorial, am discutat conceptul de perechi în Java și diferitele implementări disponibile în Java de bază, precum și alte biblioteci terțe.

Ca întotdeauna, puteți găsi codul care susține acest tutorial pe GitHub.