我有一个简单的Java整数到字符串的映射,但我需要能够轻松地从整数检索的字符串,也整数字符串。 我尝试过地图,但它可以检索整数唯一字符串,它是一种方法:
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->"low", 2->"mid", 3->"high"
,所以它就不值得去一个复杂解。
您可以使用谷歌集合API的是,最近更名为番石榴 ,特别是BIMAP
甲bimap的(或“双向映射”)是一个地图,保留了其值的唯一性以及它的密钥。 这种约束使得bimaps以支持一个“逆视图”,其是包含相同的条目,因为这bimap的但具有反向的键和值另一个bimap的。
创建番石榴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中没有双向映射。 要么你可以自己维持两个地图或使用BidiMap Apache的集合。
你可以同时插入键,值对和它的反到您的地图结构,但必须为整数转换为字符串:
map.put("theKey", "theValue");
map.put("theValue", "theKey");
然后用map.get( “theValue”)将返回 “theKey”。
这是我做了不断的地图快速和肮脏的方式,这将只为选择的几个数据集的工作:
- 只包含1至1双
- 值集合是从所述一组键的不相交的(1-> 2,2-> 3断裂的话)
如果你想保持<Integer, String>
你可以保持第二<String, Integer>
地图“把”价值- >密钥对。