Paare in Java verwenden

Verwenden von Paaren in Java

1. Überblick

In diesem kurzen Artikel diskutieren wir das äußerst nützliche Programmierkonzept, das alsPair bekannt ist. Pairs 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 vonPair 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.

Weitere Lektüre:

Die Java HashMap Under the Hood

Eine schnelle und praktische Anleitung zu den Interna von Hashmap

Read more

Iteriere über eine Karte in Java

Erfahren Sie, wie Sie durch die Einträge einer Karte in Java iterieren können.

Read more

Java - Kombinieren Sie mehrere Sammlungen

Eine schnelle und praktische Anleitung zum Kombinieren mehrerer Sammlungen in Java

Read more

2. Java-Kernimplementierung

2.1. DiePair Klasse

Die KlassePair befindet sich im Paketjavafx.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 vonInteger zuString unter Verwendung des Pair-Konzepts.

Wie gezeigt, wird der Schlüssel im Objektpair durch Aufrufen einer MethodegetKey() abgerufen, während der Wert durch Aufrufen vongetValue(). abgerufen wird

2.2. AbstractMap.SimpleEntry undAbstractMap.SimpleImmutableEntry

SimpleEntry ist als verschachtelte Klasse innerhalb der KlasseAbstractMapdefiniert. 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 Standard-Getter- und Setter-Methoden zugegriffen werden.

Darüber hinaus enthält die KlasseAbstractMapeine verschachtelte Klasse, die ein unveränderliches Paar darstellt: die KlasseSimpleImmutableEntry:

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

Dies funktioniert ähnlich wie die Klasse der veränderlichen Paare, außer dass der Wert des Paares nicht geändert werden kann. Wenn Sie dies versuchen, erhalten SieUnsupportedOperationException.

3. Apache Commons

In der Apache Commons-Bibliothek finden wir die KlassePairim Paketorg.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:ImmutablePair undMutablePair.

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 ist nicht überraschend, dass ein Versuch,setValue() aufImmutablePair aufzurufen, zuUnsupportedOperationException. führt

Die Operation ist jedoch für eine veränderbare Implementierung vollständig gültig:

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

4. Vavr

In der Vavr-Bibliothek wird die Paarfunktionalität von der Klasse der unveränderlichenTuple2bereitgestellt:

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, wodurch vermieden wird, dass dieselbe Klasse verschiedene Domänenobjekte darstellt:

public class CustomPair {
    private String key;
    private String value;

    // standard getters and setters
}

6. Alternative II - Arrays

Eine andere häufige Problemumgehung besteht darin, ein einfaches Array mit zwei Elementen zu verwenden, um ähnliche Ergebnisse zu erzielen:

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

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

7. Fazit

In diesem Tutorial haben wir das Konzept vonPairs 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 Tutorialon Github unterstützt.