使用流的地图键循环

For loop for keys of map using streams

我想检查地图的任何键是否包含在其他集合中,并且 return 一旦找到一个匹配项就为真。一般的做法是

for each element in the set:
 for each key of the map:
  if current element of set == current key of map
   return true

我想通过使用 Java 中的流来做到这一点。所以我相信将地图的键转换为流的方法是

myMap.entries().stream().map(Map.Entry::getKey)

然后 运行 每个循环上的 for 循环就是我要找的。

我认为的另一种方式是如下所示

myMap.keySet().forEach((k) -> set.contains(k));

但我希望外循环属于集合,因为集合的元素比映射少得多。

你可以这样写

return myMap.keySet().stream().anyMatch(set::contains);

return set.stream().anyMatch(myMap::containsKey);

如果 Set 小于 Map,后者应该更有效,因为 set::containsmyMap::containsKey 都应该花费预期的常数时间(假设 HashMap/HashSet实施)。

Map<K, V> map = ...;
Set<K> keySet = ...;

boolean exists = map.keySet().stream().anyMatch(keySet::contains);

有关详细信息,请参阅 here