ran*_*er1 7 java collections java-8 java-stream
我有一个List<String>in java并且它包含一些字符串.
我也有一个hashmap有String值,我想检查我的列表中是否有任何不在Hashmap中的元素.这是我写的代码:
List<String> someStrings = fetchData();
if (someStrings.stream().noneMatch(s -> myHashMap.containsValue(s))) {
return false;
}
return true;
Run Code Online (Sandbox Code Playgroud)
但它不能正常工作.你能帮帮我吗?
Nam*_*man 12
鉴于你的条件是
如果我的列表中有任何元素不在Hashmap中
您可以anyMatch在迭代元素列表时使用,以检查它们中的任何一个是否不存在于hashmap值中.
return someStrings.stream().anyMatch(val -> !myHashMap.containsValue(val))
Run Code Online (Sandbox Code Playgroud)
或者查看它,好像所有元素someStrings都存在于hashmap值中
return someStrings.stream().allMatch(myHashMap::containsValue);
Run Code Online (Sandbox Code Playgroud)
虽然类似的检查也可以使用containsAll超过Collection值:
return myHashMap.values().containsAll(someStrings);
Run Code Online (Sandbox Code Playgroud)
不需要流,你可以使用好的旧Collection#removeAll():
Set<String> copy = new HashSet<>(someStrings);
copy.removeAll(myHashMap.values());
Run Code Online (Sandbox Code Playgroud)
现在copy将包含未包含的所有值myHashMap.然后你可以用它们做一些事情(比如迭代)或者只是调用Collection#isEmpty()以检查地图中是否包含所有内容