Java 9+
In Java 9 können Sie einfach schreiben: Map.entry(key, value)
um ein unveränderliches Paar zu erstellen.
Hinweis: Bei dieser Methode dürfen Schlüssel oder Werte nicht null sein. Wenn Sie beispielsweise Nullwerte zulassen möchten, möchten Sie dies ändern in : Map.entry(key, Optional.ofNullable(value))
.
Java 8+
In Java 8 können Sie den allgemeineren Zweck verwenden javafx.util.Pair
, um ein unveränderliches, serialisierbares Paar zu erstellen. Diese Klasse ist null Schlüssel und Nullwerte zulassen. (In Java 9 ist diese Klasse im javafx.base
Modul enthalten).BEARBEITEN: Ab Java 11 wurde JavaFX vom JDK entkoppelt, sodass Sie das zusätzliche Maven-Artefakt org.openjfx: javafx-base benötigen.
Java 6+
In Java 6 und höher können Sie die ausführlichere Version AbstractMap.SimpleImmutableEntry
für ein unveränderliches Paar oder AbstractMap.SimpleEntry
für ein Paar verwenden, dessen Wert geändert werden kann. Diese Klassen erlauben auch Nullschlüssel und Nullwerte und sind serialisierbar.
Android
Wenn Sie für Android schreiben Pair.create(key, value)
, erstellen Sie einfach ein unveränderliches Paar.
Apache Commons
Apache Commons Lang
bietet die Möglichkeit Pair.of(key, value)
, ein unveränderliches, vergleichbares, serialisierbares Paar zu erstellen.
Eclipse-Sammlungen
Wenn Sie Paare verwenden, die Grundelemente enthalten, Eclipse-Sammlungen bietet einige sehr effiziente Grundelementpaarklassen, die das ineffiziente automatische Boxen und automatische Entpacken vermeiden.
Sie können beispielsweise PrimitiveTuples.pair(int, int)
ein IntIntPair
oder ein PrimitiveTuples.pair(float, long)
erstellen FloatLongPair
.
Projekt Lombok
Mit Project Lombok können Sie eine unveränderliche Paarklasse erstellen, indem Sie einfach Folgendes schreiben:
@Value
public class Pair<K, V> {
K key;
V value;
}
Lombok wird in den Konstruktor, Getter, füllen equals()
, hashCode()
und toString()
Methoden für Sie automatisch in der erzeugten Bytecode. Wenn Sie eine statische Factory-Methode anstelle eines Konstruktors möchten, z. B. a Pair.of(k, v)
, ändern Sie einfach die Anmerkung in : @Value(staticConstructor = "of")
.
Andernfalls
Wenn keine der oben genannten Lösungen Ihr Boot schwimmt, können Sie einfach den folgenden Code kopieren und einfügen (der im Gegensatz zu der in der akzeptierten Antwort aufgeführten Klasse vor NullPointerExceptions schützt):
import java.util.Objects;
public class Pair<K, V> {
public final K key;
public final V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
public boolean equals(Object o) {
return o instanceof Pair && Objects.equals(key, ((Pair<?,?>)o).key) && Objects.equals(value, ((Pair<?,?>)o).value);
}
public int hashCode() {
return 31 * Objects.hashCode(key) + Objects.hashCode(value);
}
public String toString() {
return key + "=" + value;
}
}