Java 9+
在Java 9中,您可以简单地编写:Map.entry(key, value)若要创建不可变的对,请执行以下操作。
注:此方法不允许键或值为空。例如,如果希望允许空值,则需要将其更改为: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编写的,只需使用Pair.create(key, value)若要创建不可变的对,请执行以下操作。
阿帕奇公域
日食收藏
如果使用包含原语的对,日食收藏提供一些非常有效的基元对类,以避免所有效率低下的自动装箱和自动取消装箱。
Lombok项目
使用Lombok项目,只需编写以下内容,就可以创建不可变的对类:@Valuepublic class Pair {
K key;
V value;}
Lombok会填写构造函数getter,equals(), hashCode(),和toString()方法自动在生成的字节码中。如果您想要静态工厂方法而不是构造函数,例如Pair.of(k, v),只需将注释更改为:@Value(staticConstructor = "of").
不然的话
如果上述解决方案中没有一个浮动您的船,您可以简单地复制和粘贴以下代码(与接受的答案中列出的类不同,它防止NullPointerExceptions):import java.util.Objects;public class Pair {
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;
}}