Java 9+
In Java 9, puoi semplicemente scrivere: Map.entry(key, value)
per creare una coppia immutabile.
Nota: questo metodo non consente che chiavi o valori siano nulli. Se si desidera consentire valori nulli, per esempio, che ci si vuole cambiare questo a: Map.entry(key, Optional.ofNullable(value))
.
Java 8+
In Java 8, è possibile utilizzare lo scopo più generale javafx.util.Pair
per creare una coppia immutabile e serializzabile. Questa classe non permette chiavi nulli e valori nulli. (In Java 9, questa classe è inclusa nel javafx.base
modulo). EDIT: A partire da Java 11, JavaFX è stato disaccoppiato dal JDK, quindi avresti bisogno del manufatto aggiuntivo org.openjfx: javafx-base.
Java 6+
In Java 6 e versioni successive, è possibile utilizzare il più dettagliato AbstractMap.SimpleImmutableEntry
per una coppia immutabile o AbstractMap.SimpleEntry
per una coppia il cui valore può essere modificato. Queste classi consentono anche chiavi null e valori null e sono serializzabili.
androide
Se stai scrivendo per Android, basta usare Pair.create(key, value)
per creare una coppia immutabile.
Apache Commons
Apache Commons Lang
fornisce l'utile Pair.of(key, value)
per creare una coppia immutabile, comparabile, serializzabile.
Collezioni Eclipse
Se stai usando coppie che contengono primitive, Eclipse Collections fornisce alcune classi di coppie di primitive molto efficienti che eviteranno tutti gli inefficienti box-auto e auto-unboxing.
Ad esempio, è possibile utilizzare PrimitiveTuples.pair(int, int)
per creare unIntIntPair
o PrimitiveTuples.pair(float, long)
per creare un FloatLongPair
.
Progetto Lombok
utilizzando Project Lombok , puoi creare una classe di coppia immutabile semplicemente scrivendo:
@Value
public class Pair<K, V> {
K key;
V value;
}
Lombok riempirà nel costruttore, getter, equals()
,hashCode()
, e toString()
metodi per voi automaticamente nel bytecode generato. Se si desidera un metodo factory statico invece di un costruttore, ad esempio, una Pair.of(k, v)
, è sufficiente modificare l'annotazione a: @Value(staticConstructor = "of")
.
Altrimenti
Se nessuna delle soluzioni sopra indicate fa galleggiare la tua barca, puoi semplicemente copiare e incollare il seguente codice (che, a differenza della classe elencata nella risposta accettata, protegge da 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;
}
}