Java 9+
На Java 9 можна просто написати: Map.entry(key, value)
створити незмінну пару.
Примітка. Цей метод не дозволяє нулю клавіш або значень. Якщо ви хочете , щоб значення NULL, наприклад, ви хочете змінити це: Map.entry(key, Optional.ofNullable(value)).
Java 8+
У Java 8 ви можете використовувати більш загальні цілі javafx.util.Pairдля створення непорушної, серіалізаційної пари. Цей клас має дозволяють ключі нульових значень і нульові. (У Java 9 цей клас включений в javafx.baseмодуль). ВИДАЛЕННЯ: Як і в Java 11, JavaFX був від'єднаний від JDK, тому вам знадобиться додатковий артефакт Maven org.openjfx: javafx-base.
Java 6+
У Java 6 і вище ви можете використовувати більш багатослівний AbstractMap.SimpleImmutableEntryдля незмінної пари або AbstractMap.SimpleEntryдля пари, значення якої можна змінити. Ці класи також дозволяють нульові ключі та нульові значення та є серіалізаційними.
Android
Якщо ви пишете для Android, просто використовуйте Pair.create(key, value)для створення непорушної пари.
Apache Commons
Apache Commons Langзабезпечує корисну Pair.of(key, value)для створення незмінну, порівнянну, серіалізаційну пару.
Колекції затемнення
Якщо ви використовуєте пари, що містять примітиви, Eclipse Collections надає кілька дуже ефективних класів примітивних пар, що дозволить уникнути всіх неефективних автобоксингу та авторозпакування.
Наприклад, ви можете використовувати PrimitiveTuples.pair(int, int)для створення IntIntPairабо PrimitiveTuples.pair(float, long)для створення FloatLongPair.
Проект Ломбок
Використовуючи Project Lombok , ви можете створити непорушний клас пар просто, написавши:
@Value
public class Pair<K, V> {
K key;
V value;
}
Ломбок заповнить конструктора, здобувач, equals(), hashCode()і toString()методи для вас автоматично згенерованих байт - коди. Якщо ви хочете статичний метод фабрики замість конструктора, наприклад, Pair.of(k, v)просто змінити анотацію: @Value(staticConstructor = "of").
Інакше
Якщо жодне з перерахованих вище рішень не плаває на вашому човні, ви можете просто скопіювати та вставити наступний код (який, на відміну від класу, зазначеного у прийнятій відповіді, захищає від 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;
}
}