我在Java中有一个简单的整数到字符串映射,但我需要能够轻松地从整数中检索字符串,并且还能从字符串中检索整数。我已经尝试过Map,但是它只能从整数中检索字符串,这是一种方式:
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"
,因此找一个复杂的解决方案是不值得的。
答案 0 :(得分:66)
您可以使用Google Collections API,最近重命名为Guava,特别是BiMap
bimap(或&#34;双向地图&#34;)是保留地图的地图 其价值的独特性以及其价值的独特性。这个约束 使bimaps支持&#34;反向视图&#34;,这是另一个bimap 包含与此bimap相同的条目,但使用反向键和 值。
答案 1 :(得分:30)
创建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"));
}
}
答案 2 :(得分:20)
Java Standard API中没有双向映射。您可以自己维护两个地图,也可以使用Apache Collections中的BidiMap。
答案 3 :(得分:8)
Apache commons集合有一个BidiMap
答案 4 :(得分:8)
您可以将键,值对及其反转插入到地图结构中,但必须将整数转换为字符串:
map.put("theKey", "theValue");
map.put("theValue", "theKey");
使用map.get(“theValue”)将返回“theKey”。
这是一种快速而肮脏的方式,我制作了常量地图,这只适用于少数数据集:
如果您想保留<Integer, String>
,可以保留第二张<String, Integer>
地图以“放置”该值 - &gt;密钥对。
答案 5 :(得分:4)
使用Google BiMap
更方便。