Java 9+
Java 9'da, şunu yazabilirsiniz: Map.entry(key, value)
değişmez bir çift oluşturmak için.
Not: Bu yöntem, anahtarların veya değerlerin boş olmasına izin vermez. Eğer boş değerlere izin vermek istiyorsanız, örneğin, bu değiştirmek isteyebilirsiniz: Map.entry(key, Optional.ofNullable(value))
.
Java 8+
Java 8'de, javafx.util.Pair
değiştirilemez, serileştirilebilir bir çift oluşturmak için daha genel amacı kullanabilirsiniz. Bu sınıf gelmez boş tuşları ve boş değerler izin verir. (Java 9'da, bu sınıf javafx.base
modüle dahildir ). DÜZENLEME: Java 11'den itibaren JavaFX, JDK'dan ayrılmıştır, bu nedenle ek maven yapay nesnesi org.openjfx: javafx-base'e ihtiyacınız olacaktır.
Java 6+
Java 6 ve sonraki sürümlerde AbstractMap.SimpleImmutableEntry
, değişmez bir çift AbstractMap.SimpleEntry
için veya değeri değiştirilebilen bir çift için daha ayrıntılı kullanabilirsiniz . Bu sınıflar ayrıca null anahtarlara ve null değerlere izin verir ve serileştirilebilir.
Android
Android için yazıyorsanız, Pair.create(key, value)
değişmez bir çift oluşturmak için kullanın .
Apache Commons
Apache Commons Lang
Pair.of(key, value)
değişmez, karşılaştırılabilir, serileştirilebilir bir çift oluşturmaya yardımcı olur.
Eclipse Koleksiyonları
İlkel içeren çiftler kullanıyorsanız, Eclipse Collections , tüm verimsiz otomatik boks ve otomatik bokstan kaçınacak bazı çok verimli ilkel çift sınıfları sağlar.
Örneğin, kullanabilirsiniz PrimitiveTuples.pair(int, int)
bir yaratmak için IntIntPair
, ya PrimitiveTuples.pair(float, long)
bir yaratmak FloatLongPair
.
Lombok Projesi
Project Lombok'u kullanarak , sadece şunu yazarak değişmez bir çift sınıf oluşturabilirsiniz:
@Value
public class Pair<K, V> {
K key;
V value;
}
Lombok yapıcısı gaz gidericiler, dolduracaktır equals()
, hashCode()
ve toString()
oluşturulan byte sizin için otomatik yöntemlerle. Eğer örneğin statik bir fabrika yöntemini yerine yapıcı, isterseniz bir Pair.of(k, v)
, sadece Ek açıklamayı değiştirin: @Value(staticConstructor = "of")
.
Aksi takdirde
Yukarıdaki çözümlerden hiçbiri teknenizi yüzdürmezse, aşağıdaki kodu kopyalayıp yapıştırabilirsiniz (kabul edilen cevapta listelenen sınıfın aksine, NullPointerExceptions'a karşı korur):
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;
}
}