下面是我的代码拿到钥匙...的Java地图从价值
Map<Integer, String> MyType = sessionInfo.getType();
//{2=somename}
我想从价值的关键......不运行任何环路....这可能吗?
MyType.get("somename") // should output 2`
下面是我的代码拿到钥匙...的Java地图从价值
Map<Integer, String> MyType = sessionInfo.getType();
//{2=somename}
我想从价值的关键......不运行任何环路....这可能吗?
MyType.get("somename") // should output 2`
这并不容易摆脱价值关键在哈希表或HashMap中,相比以获得密钥的价值,因为哈希映射或哈希表不强制执行Java中的Map内的键和值之间的一对一映射。 Infact Map允许将相同的值映射到HashMap,Hashtable或任何其他Map实现中的多个键。
String key= null;
String value="somename";
for(Map.Entry entry: MyType.entrySet()){
if(value.equals(entry.getValue())){
key = entry.getKey();
break; //breaking because its one to one map
}
}
我会鼓励为了简单而运行循环。它很可能不会减慢你的程序一个明显的数量。但是,如果您不能运行循环,Google的番石榴图书馆会有一个名为BiMap的BiDirectional Map Collection,它可以是(found here)。地图可以双向运行,并且保证随时都可以同步。我也假设你在地图上有独特的价值。如果你不这样做,重复的值将没有特定的关键链接。
BiMap<String, Integer> biMapInversed = biMap.inverse(); // how to get inverted map
再说一遍,除非绝对必要,否则我不会鼓励。循环播放在大多数情况下都可以很好地工作。
这是不可能的。您需要考虑可能在地图中复制的值。 例如,你如何处理{2 = somename}和{5 = somename}
你仍然需要使用for循环来检查值和获取键,并决定打破或继续进行值匹配。
如果您确定自己的值是唯一的,则可以遍历旧映射的条目。
Map<String, Character> myNewHashMap = new HashMap<>();
for(Map.Entry<Character, String> entry : myHashMap.entrySet()){
myNewHashMap.put(entry.getValue(), entry.getKey());
}
或者,你可以使用一个双向的地图状番石榴提供和使用逆()方法:
BiMap<Character, String> myBiMap = HashBiMap.create();
myBiMap.put('a', "test one");
myBiMap.put('b', "test two");
BiMap<String, Character> myBiMapInversed = myBiMap.inverse();
两者如果您选择使用的 的Commons Collections library而不是标准的Java集合API,您可以轻松实现这一目标。
在类别库BidiMap接口是 双向地图,允许你映射一键的值(像正常 映射),并且还以映射的值的键,从而使用户可以执行 在两个方向上查找。通过getKey() method支持获得值的密钥 。
有一个警告,虽然,比迪地图不能有映射到 多重键的值,因此除非你的数据集有1:键 和价值观,你不能使用bidimaps之间1映射。
在map中,不可能直接获取给定值的密钥。 – Rahul
如果多个键的值相同,你期望什么? – vins
在我的情况下..值不能相同.. –