Verwenden von Paaren in Java

1. Übersicht

In diesem kurzen Artikel diskutieren wir das äußerst nützliche Programmierkonzept, das als Paar bezeichnet wird . Paare bieten eine bequeme Möglichkeit, die einfache Zuordnung von Schlüssel zu Wert zu handhaben, und sind besonders nützlich, wenn zwei Werte von einer Methode zurückgegeben werden sollen.

Eine einfache Implementierung eines Paares ist in den Java-Kernbibliotheken verfügbar. Darüber hinaus haben bestimmte Bibliotheken von Drittanbietern wie Apache Commons und Vavr diese Funktionalität in ihren jeweiligen APIs verfügbar gemacht.

2. Java-Kernimplementierung

2.1. Die Pair - Klasse

Die Pair- Klasse finden Sie im Paket javafx.util . Der Konstruktor dieser Klasse akzeptiert zwei Argumente, einen Schlüssel und den entsprechenden Wert:

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

Dieses Beispiel zeigt eine einfache Zuordnung von Ganzzahlen zu Zeichenfolgen mithilfe des Pair-Konzepts.

Wie gezeigt, ist der Schlüssel in dem Paar wird Objekt abgerufen , indem eine Aufruf getKey () Methode , während der Wert durch den Aufruf abgerufen wird getValue ().

2.2. AbstractMap.SimpleEntry und AbstractMap.SimpleImmutableEntry

SimpleEntry ist als verschachtelte Klasse innerhalb der AbstractMap- Klasse definiert. Um ein Objekt dieses Typs zu erstellen, können wir dem Konstruktor einen Schlüssel und einen Wert bereitstellen:

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

Auf den Schlüssel und den Wert kann über Standardmethoden für Getter und Setter zugegriffen werden.

Darüber hinaus enthält die AbstractMap- Klasse eine verschachtelte Klasse, die ein unveränderliches Paar darstellt: die SimpleImmutableEntry- Klasse:

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

Dies funktioniert ähnlich wie bei der Klasse der veränderlichen Paare, außer dass der Wert des Paares nicht geändert werden kann. Wenn Sie dies versuchen, wird eine UnsupportedOperationException ausgelöst .

3. Apache Commons

In der Apache Commons-Bibliothek finden wir die Pair- Klasse im Paket org.apache.commons.lang3.tuple . Dies ist eine abstrakte Klasse, daher kann sie nicht direkt instanziiert werden.

Wir können hier zwei Unterklassen finden - die unveränderliche und veränderbare Paare darstellen: Imm utablePair und MutablePair.

Beide Implementierungen haben Zugriff auf Schlüssel / Wert-Getter / Setter-Methoden:

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

Es überrascht nicht, dass ein Versuch, setValue () für ImmutablePair aufzurufen, zu einer UnsupportedOperationException führt .

Die Operation gilt jedoch vollständig für eine veränderbare Implementierung:

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

4. Vavr

In der Vavr-Bibliothek wird die Paarfunktionalität von der unveränderlichen Tuple2- Klasse bereitgestellt :

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

In dieser Implementierung können wir das Objekt nach der Erstellung nicht ändern. Daher geben mutierende Methoden eine neue Instanz zurück, die die bereitgestellte Änderung enthält:

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

5. Alternative I - Einfache Containerklasse

Entweder nach Benutzerpräferenz oder in Abwesenheit einer der oben genannten Bibliotheken besteht eine Standardumgehung für die Paarfunktionalität darin, eine einfache Containerklasse zu erstellen, die die gewünschten Rückgabewerte umschließt.

Der größte Vorteil hierbei ist die Möglichkeit, unseren Namen anzugeben, um zu vermeiden, dass dieselbe Klasse unterschiedliche Domänenobjekte darstellt:

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

6. Alternative II - Arrays

Eine weitere häufige Problemumgehung ist die Verwendung eines einfachen Arrays mit zwei Elementen, um ähnliche Ergebnisse zu erzielen:

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

Normalerweise befindet sich der Schlüssel am Index Null des Arrays, während sich der entsprechende Wert am Index Eins befindet.

7. Fazit

In diesem Lernprogramm haben wir das Konzept von Paaren in Java und die verschiedenen Implementierungen in Kern-Java sowie in anderen Bibliotheken von Drittanbietern erläutert.

Wie immer finden Sie den Code, der dieses Tutorial unterstützt, auf GitHub.