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;
}
}