Does Java have a HashMap with reverse lookup?
There is no such class in the Java API. The Apache Commons class you want is going to be one of the implementations of BidiMap.
As a mathematician, I would call this kind of structure a bijection.
Java HashMap reverse way
You can use Guava BiMap :
BiMap<String, Long> map = HashBiMap.create();
map.put("a", 1L);
map.put("b", 2L);
map.put("c", 3L);
System.out.println(map.get("b")); // 2L
System.out.println(map.inverse().get(2L)); // "b"
An other alternative is Apache commons BidiMap :
BidiMap<String, Long> map = new DualHashBidiMap<>();
map.put("a", 1L);
map.put("b", 2L);
map.put("c", 3L);
System.out.println(map.get("b")); // 2L
System.out.println(map.inverseBidiMap().get(2L)); // "b"
Reverse HashMap keys and values in Java
They all are unique, yes
If you're sure that your values are unique you can iterate over the entries of your old map .
Map<String, Character> myNewHashMap = new HashMap<>();
for(Map.Entry<Character, String> entry : myHashMap.entrySet()){
myNewHashMap.put(entry.getValue(), entry.getKey());
}
Alternatively, you can use a Bi-Directional map like Guava provides and use the inverse()
method :
BiMap<Character, String> myBiMap = HashBiMap.create();
myBiMap.put('a', "test one");
myBiMap.put('b', "test two");
BiMap<String, Character> myBiMapInversed = myBiMap.inverse();
As java-8 is out, you can also do it this way :
Map<String, Integer> map = new HashMap<>();
map.put("a",1);
map.put("b",2);
Map<Integer, String> mapInversed =
map.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey))
Finally, I added my contribution to the proton pack library, which contains utility methods for the Stream API. With that you could do it like this:
Map<Character, String> mapInversed = MapStream.of(map).inverseMapping().collect();
Does Java have a HashMap with reverse lookup?
There is no such class in the Java API. The Apache Commons class you want is going to be one of the implementations of BidiMap.
As a mathematician, I would call this kind of structure a bijection.
Hashmap reverse key lookup
Consider using a Guava BiMap instead of a HashMap:
A bimap (or "bidirectional map") is a map that preserves the uniqueness of its values as well as that of its keys. This constraint enables bimaps to support an "inverse view", which is another bimap containing the same entries as this bimap but with reversed keys and values.
Then, you can do:
String key = map.inverse.get(theValue);
How to reverse a HashMap?
Please check if the below code I've written is useful for you as a reference:
public void reverseMap()
{
NavigableMap<Integer,String> map = new TreeMap<Integer,String>();
LinkedHashMap<Integer,String> reverseMap = new LinkedHashMap<Integer,String>();
map.put(1,"Apple");
map.put(2,"Ball");
map.put(3,"Cat");
NavigableSet<Integer> keySet = map.navigableKeySet();
Iterator<Integer> iterator = keySet.descendingIterator();
Integer i;
while(iterator.hasNext())
{
i = iterator.next();
reverseMap.put(i,map.get(i));
}
System.out.println(reverseMap);
}
Java - Fetch key from HashMap Single Key Multiple Values (Reverse Map)
You can do it with Map iteration.
private Foo getKeyByValue(Map<Foo, List<Bar>> map, Bar bar){
for (Map.Entry<Foo, List<Bar>> entry : map.entrySet()){
if (entry.getValue().contains(bar)){
return entry.getKey();
}
}
return null;
}
You iterate for each entry on the map and you return the Key when the array list contains the entered bar value.
Note that your Bar class should implement the equals method so the entry.getValue().contains(bar)
can be evaluated if the bar in the List with the bar on the method input are different objects.
Update: Added missing return null
statement when no map element is found.
How can I get the Key for a specific Value in a HashMap?
You can return key from HashMap by using "KeySet()" method.
HashMap objH=new HashMap<>();
Set objSet=objH.keySet();
public static LegendaryItem getClass(UUID uniqueId) {
Iterator objItr=objSet.iterator();
while(objItr.hasNext()){
UUID objStr=(UUID) objItr.next();
if(objStr.equals(uniqueId)){
return objStr;
}
}
}
Iterate the ObjSet and get each key
How to iterate hashmap in reverse order in Java
Hashmap does not have specific order. But you can use TreeMap.
Perhaps this simple example can help you :
Map<Integer, String> map = new TreeMap<Integer, String>();
map.put(1, "abc1");
map.put(2, "abc2");
map.put(3, "abc3");
ArrayList<Integer> keys = new ArrayList<Integer>(map.keySet());
for(int i=keys.size()-1; i>=0;i--){
System.out.println(map.get(keys.get(i)));
}
Related Topics
How to Asynchronously Call a Method in Java
Capturing Image from Webcam in Java
Log4J: Log Output of a Specific Class to a Specific Appender
How Do Java Interfaces Simulate Multiple Inheritance
How to Get Milliseconds from Localdatetime in Java 8
How to Customize Parameter Names When Binding Spring MVC Command Objects
Creating a "Logical Exclusive Or" Operator in Java
Embedded Mongodb When Running Integration Tests
Rest - Http Post Multipart with JSON
How to Make Java Honor the Dns Caching Timeout
Default Values and Initialization in Java
How to Create an Instance of an Interface in Java
How to Update Path Variable Permanently from Windows Command Line
How to Create an Asynchronous Http Request in Java
Configuring Spring Security 3.X to Have Multiple Entry Points