[英]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::contains
和myMap::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.