Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用流的映射键的For循环_Java_Java 8_Stream_Java Stream - Fatal编程技术网

Java 使用流的映射键的For循环

Java 使用流的映射键的For循环,java,java-8,stream,java-stream,Java,Java 8,Stream,Java Stream,我想检查一个映射的任何键是否包含在其他集合中,并在找到一个匹配项后立即返回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的键转换为流的方法是 myMap.entries().stream().map(Map.Entry:

我想检查一个映射的任何键是否包含在其他集合中,并在找到一个匹配项后立即返回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的键转换为流的方法是

myMap.entries().stream().map(Map.Entry::getKey)
但是,然后在每一个上运行一个for循环,这就是我要寻找的

我想的另一个方法是做如下的事情

myMap.keySet().forEach((k) -> set.contains(k));
但是我希望外部循环是集合的一部分,因为集合的元素比映射的元素少。

您可以编写

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

如果集合小于映射,则后者应该更有效,因为集合::contains和myMap::containsKey在假设HashMap/HashSet实现的情况下都应该花费预期的恒定时间。

您可以编写

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

如果集合小于映射,则后者应该更有效,因为集合::contains和myMap::containsKey都应该在假定HashMap/HashSet实现的情况下花费预期的恒定时间。

Map Map=。。。; 设置键集=。。。; boolean exists=map.keySet.stream.anyMatchkeySet::contains; 有关更多详细信息,请参见。

Map-Map=。。。; 设置键集=。。。; boolean exists=map.keySet.stream.anyMatchkeySet::contains;
有关更多详细信息,请参见。

太心不在焉了,没有问过复杂性问题,谢谢您指出。@SonaliGupta实际上我更改了复杂性部分。如上所述,通过集合进行流媒体传输应该更有效。对于第二个选项,将set.stream.anyMatchmyMap.entrySet;相同,因为我发现如果返回布尔值相同,那么更容易阅读。@SonaliGupta不能将myMap.entrySet传递给anyMatch,因为它不是谓词。您必须传递x->myMap.entrySet.containsx.Yes,它不编译。我想了解的是,它是否意味着整个条目集中的任何匹配。但我认为这意味着集合中的任何元素都与地图上的任何键匹配。很清楚。将进一步深入阅读。谢谢你回答这些问题。太心不在焉了,没有问过复杂性问题,谢谢你指出这点。@SonaliGupta实际上我改变了关于复杂性的部分。如上所述,通过集合进行流媒体传输应该更有效。对于第二个选项,将set.stream.anyMatchmyMap.entrySet;相同,因为我发现如果返回布尔值相同,那么更容易阅读。@SonaliGupta不能将myMap.entrySet传递给anyMatch,因为它不是谓词。您必须传递x->myMap.entrySet.containsx.Yes,它不编译。我想了解的是,它是否意味着整个条目集中的任何匹配。但我认为这意味着集合中的任何元素都与地图上的任何键匹配。很清楚。将进一步深入阅读。谢谢你回答这些问题。