Let's use an implementation of java.util.Map in the same way you'd use a contacts list, either at your job or one you keep on your phone.
Let's say, for instance, you want to find your friend John Smith's phone number so you can give him a call. You are given the chance to search either by first name or by last name.
However, Java's limitation on maps is that the key must be unique across all keys, and thus, if you know a John Smith and a John Doe, then the last person you inserted into the map will "win", and you'll lose the data of John Smith. Silently.
If you instead inserted by last name (e.g. Smith), and were to then put values of all of the Smiths you knew into a list (John, Jane, William, Robert, Emmett), you would be able to find what you were looking for both efficiently and safely, without the risk of damaging your contact list.
The reason that you can't search by value is that a value has no explicit guarantee of uniqueness when stored in a key-value pair data structure. Even Guava's BiMap, which has been touted as a "solution" to your problem, still suffers from the limitation of uniqueness across keys and values, which ain't what you want. Worse still, it would be a nightmare to have a structure of Map<List<String>, String>, chiefly because that key can change which is not what anyone wants at all.
If you want to be able to get a key given a value, then you have no choice but to iterate the entire contents of the data structure, which (thankfully, or frightfully - take your pick) is exactly what Map.Entry<K, V> provides - an iterable entry set so that you can do your own checks on each element in the map.