繁体   English   中英

对于使用流的 map 的键的循环

[英]For loop for keys of map using streams

我想检查 map 的任何键是否包含在其他集合中,并在找到一个匹配项后立即返回 true。 这样做的一般方式就像

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

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

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

但是然后在每一个上运行一个 for 循环,这就是我正在寻找的。

我认为的另一种方法是如下

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

但我希望外循环是集合,因为集合的元素比 map 少得多。

你可以写

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);

有关更多详细信息,请参见此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM