I have a Map<String, ArrayList>
and a Set<String>
. Is there a way to "intersect" the keys of the map with the set of strings such that only the pairs with the given key remain, without iterating over the entire map? My main concern is performance and re-inventing the wheel on something that can be done more elegantly.
We can filter a Map in Java 8 by converting the map. entrySet() into Stream and followed by filter() method and then finally collect it using collect() method.
Few Java examples to show you how to filter a Map with Java 8 stream API. With Java 8, you can convert a Map. entrySet() into a stream , follow by a filter() and collect() it.
Just do:
map.keySet().retainAll(set);
As per the javadoc, the changes in the key set are reflected back in the map.
... The set is backed by the map, so changes to the map are reflected in the set, and vice-versa. ...
Here's a demo:
Map<String, String> map = new HashMap<String, String>(); map.put("1", "one"); map.put("2", "two"); map.put("3", "three"); Set<String> set = new HashSet<String>(); set.add("1"); set.add("3"); map.keySet().retainAll(set); System.out.println(map); // {3=three, 1=one}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With