First time here so I hope this makes sense!
I have a Map which contains a String as it's Key, and a List of Strings as it's Value. I need to iterate over all vlaues contained within each List within the Map.
So, first I want to get the Keys, which works:
Set<String> keys = theMap.keySet();
This returns me a Set containing all my Keys. Great :)
This is where I've got stuck - most of the info on the web seems to assume that the values I'd want returned from the Key would be a simple String or Integer, not another Set, or in this case a List. I tried theMap.values()
but that didn't work, and I tried a forloop / for:eachloop, and neither of those did the trick.
Thanks y'all!
I recommend iterating over
Map.entrySet()
as it is faster (you have both, the key and the value, found in one step).And the output is, as expected:
That's really the "normal" way to do it. Or, if you need the key as well...
That said, if you have the option, you might be interested in Guava's
ListMultimap
, which is a lot like aMap<K, List<V>>
, but has a lot more features -- including aCollection<V> values()
that acts exactly like what you're asking for, "flattening" all the values in the multimap into one collection. (Disclosure: I contribute to Guava.)You need a
Map<String, List<String>>
The left hand side
String
is the key, the right hand sideList<String>
is the value, which in this case is aList
ofString
s