Java 使用流的映射键的For循环
我想检查一个映射的任何键是否包含在其他集合中,并在找到一个匹配项后立即返回true。一般的做法是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:
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,它不编译。我想了解的是,它是否意味着整个条目集中的任何匹配。但我认为这意味着集合中的任何元素都与地图上的任何键匹配。很清楚。将进一步深入阅读。谢谢你回答这些问题。