Java 9以降
Java 9では、次のように書くだけでMap.entry(key, value)
不変のペアを作成できます。
注:このメソッドでは、キーまたは値をnullにすることはできません。たとえば、null値を許可する場合は、これを次のように変更しますMap.entry(key, Optional.ofNullable(value))
。
Java 8以降
Java 8では、より汎用的な目的javafx.util.Pair
を使用して、不変でシリアル化可能なペアを作成できます。このクラスは nullキーとnull値を許可します。(Java 9では、このクラスはjavafx.base
モジュールに含まれています)。編集:Java 11以降、JavaFXはJDKから切り離されているため、追加のMavenアーティファクトorg.openjfx:javafx-baseが必要になります。
Java 6以降
Java 6以降でAbstractMap.SimpleImmutableEntry
は、不変のペア、またはAbstractMap.SimpleEntry
値を変更できるペアの詳細を使用できます。これらのクラスはnullキーとnull値も許可し、シリアル化可能です。
アンドロイド
Android向けPair.create(key, value)
に作成している場合は、を使用して不変ペアを作成します。
Apache Commons
Apache Commons Lang
は、Pair.of(key, value)
不変で比較可能な直列化可能なペアを作成するのに役立ちます。
Eclipseコレクション
プリミティブを含むペアを使用している場合、Eclipseコレクションは非常に効率的なプリミティブペアクラスを提供し、非効率的な自動ボックス化と自動ボックス化解除をすべて回避します。
たとえば、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()
生成されたバイトコードに自動的にあなたのための方法。コンストラクターの代わりに静的なファクトリーメソッド(aなど)が必要な場合は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;
}
}