下面是我的代碼拿到鑰匙...的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
在我的情況下..值不能相同.. –