Java 9+
Trong Java 9, bạn có thể chỉ cần viết: Map.entry(key, value)
để tạo một cặp bất biến.
Lưu ý: phương pháp này không cho phép các khóa hoặc giá trị là null. Ví dụ: nếu bạn muốn cho phép giá trị null, bạn muốn thay đổi giá trị này thành : Map.entry(key, Optional.ofNullable(value))
.
Java 8+
Trong Java 8, bạn có thể sử dụng mục đích chung hơn javafx.util.Pair
để tạo một cặp tuần tự, bất biến. Lớp này không cho phép khóa null và giá trị null. (Trong Java 9, lớp này được bao gồm trong javafx.base
mô-đun). EDIT: Kể từ Java 11, JavaFX đã được tách rời khỏi JDK, do đó, bạn cần thêm phần tạo tác maven org.openjfx: javafx-base.
Java 6+
Trong Java 6 trở lên, bạn có thể sử dụng nhiều chi tiết hơn AbstractMap.SimpleImmutableEntry
cho một cặp không thay đổi hoặc AbstractMap.SimpleEntry
cho một cặp có giá trị có thể thay đổi. Các lớp này cũng cho phép các khóa null và giá trị null và được tuần tự hóa.
Android
Nếu bạn đang viết cho Android, chỉ cần sử dụng Pair.create(key, value)
để tạo một cặp bất biến.
Cộng đồng Apache
Apache Commons Lang
cung cấp sự hữu ích Pair.of(key, value)
để tạo ra một cặp bất biến, có thể so sánh, tuần tự hóa.
Bộ sưu tập Eclipse
Nếu bạn đang sử dụng các cặp có chứa nguyên thủy, Bộ sưu tập Eclipse cung cấp một số lớp cặp nguyên thủy rất hiệu quả sẽ tránh được tất cả các hộp tự động không hiệu quả và tự động mở hộp.
Chẳng hạn, bạn có thể sử dụng PrimitiveTuples.pair(int, int)
để tạo một IntIntPair
hoặc PrimitiveTuples.pair(float, long)
để tạo một FloatLongPair
.
Dự án Lombok
Sử dụng Project Lombok , bạn có thể tạo một lớp cặp bất biến chỉ bằng cách viết:
@Value
public class Pair<K, V> {
K key;
V value;
}
Lombok sẽ điền vào các nhà xây dựng, thu khí, equals()
, hashCode()
, và toString()
phương pháp để bạn tự động trong bytecode tạo ra. Nếu bạn muốn một phương thức nhà máy tĩnh thay vì hàm tạo, ví dụ: a Pair.of(k, v)
, chỉ cần thay đổi chú thích thành : @Value(staticConstructor = "of")
.
Nếu không thì
Nếu không có giải pháp nào ở trên làm nổi thuyền của bạn, bạn chỉ cần sao chép và dán mã sau đây (không giống như lớp được liệt kê trong câu trả lời được chấp nhận, bảo vệ chống lại NullPulumExceptions):
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;
}
}