Javaには単純な整数から文字列へのマッピングがありますが、文字列を整数から、また整数を文字列から簡単に取得できる必要があります。 Mapを試しましたが、整数から文字列のみを取得できます。これは1つの方法です。
private static final Map<Integer, String> myMap = new HashMap<Integer, String>();
// This works one way:
String myString = myMap.get(myInteger);
// I would need something like:
Integer myInteger = myMap.getKey(myString);
それを双方向にするための正しい方法はありますか?
もう1つの問題は、変更しない定数値がいくつかしかありません(1->"low", 2->"mid", 3->"high"
です。そのため、複雑なソリューションを採用する価値はありません。
Guava BiMapを作成し、逆の値を取得するのはそれほど簡単ではありません。
簡単な例:
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
public class BiMapTest {
public static void main(String[] args) {
BiMap<String, String> biMap = HashBiMap.create();
biMap.put("k1", "v1");
biMap.put("k2", "v2");
System.out.println("k1 = " + biMap.get("k1"));
System.out.println("v2 = " + biMap.inverse().get("v2"));
}
}
Java標準APIには双方向マップはありません。 2つのマップを自分で管理するか、Apacheコレクションの BidiMap を使用できます。
Apache commonsコレクションには BidiMap があります
キーと値のペアとその逆の両方をマップ構造に挿入できますが、整数を文字列に変換する必要があります。
map.put("theKey", "theValue");
map.put("theValue", "theKey");
Map.get( "theValue")を使用すると、「theKey」が返されます。
これは、一定のマップを作成するための迅速で汚い方法です。これは、いくつかのデータセットのみで機能します。
<Integer, String>
を保持する場合は、2番目の<String, Integer>
マップを保持して、値を入力->キーペアにすることができます。
Googleの BiMap を使用
もっと便利です。