Java 9+
W Javie 9 możesz po prostu napisać: Map.entry(key, value)
aby stworzyć niezmienną parę.
Uwaga: ta metoda nie pozwala, aby klucze lub wartości były zerowe. Jeśli chcesz zezwolić na wartości null, na przykład, że chcesz to zmienić na: Map.entry(key, Optional.ofNullable(value)).
Java 8+
W Javie 8 możesz użyć bardziej ogólnego przeznaczenia, javafx.util.Pairaby stworzyć niezmienną, szeregowalną parę. Klasa ta ma umożliwić klucze nieważne i wartości null. (W Javie 9 ta klasa jest zawarta w javafx.basemodule). EDYCJA: Od wersji Java 11 JavaFX został oddzielony od JDK, więc potrzebujesz dodatkowego artefaktu maven org.openjfx: javafx-base.
Java 6+
W Javie 6 i nowszych możesz użyć bardziej szczegółowego AbstractMap.SimpleImmutableEntrydla niezmiennej pary lub AbstractMap.SimpleEntrydla pary, której wartość można zmienić. Klasy te zezwalają również na klucze zerowe i wartości zerowe oraz są serializowane.
Android
Jeśli piszesz dla Androida, po prostu użyj, Pair.create(key, value)aby stworzyć niezmienną parę.
Apache Commons
Apache Commons Langzapewnia pomoc w Pair.of(key, value)tworzeniu niezmiennej, porównywalnej, możliwej do serializacji pary.
Kolekcje Eclipse
Jeśli używasz par zawierających prymitywy, Eclipse Collections zapewnia kilka bardzo wydajnych klas par prymitywnych, które pozwolą uniknąć wszystkich nieefektywnych auto-boxowania i auto-rozpakowywania.
Na przykład, można użyć PrimitiveTuples.pair(int, int), aby utworzyć IntIntPair, lub PrimitiveTuples.pair(float, long)stworzyć FloatLongPair.
Projekt Lombok
Korzystając z Project Lombok , możesz stworzyć niezmienną klasę par, pisząc:
@Value
public class Pair<K, V> {
K key;
V value;
}
Lombok wypełni w konstruktorze, pochłaniacze equals(), hashCode()oraz toString()metod dla Ciebie automatycznie w wygenerowanym kodu bajtowego. Jeśli chcesz statyczne metody fabryki zamiast konstruktora, np Pair.of(k, v), wystarczy zmienić adnotacji do: @Value(staticConstructor = "of").
Inaczej
Jeśli żadne z powyższych rozwiązań nie unosi twojej łodzi, możesz po prostu skopiować i wkleić następujący kod (który, w przeciwieństwie do klasy wymienionej w zaakceptowanej odpowiedzi, chroni przed wyjątkami NullPointerExceptions):
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;
}
}