如何检查数组列表中的元素是否不在哈希图中?

时间:2019-02-20 13:09:32

标签: java collections java-8 java-stream

我在List<String>中有一个java,其中包含一些字符串。

我也有一个带有hashmap值的String,我想检查一下列表中是否有Hashmap中没有的元素。这是我写的代码:

List<String> someStrings = fetchData();
if (someStrings.stream().noneMatch(s -> myHashMap.containsValue(s))) {
    return false;
} 
return true;

但是它不能正常工作。你能帮我吗?

2 个答案:

答案 0 :(得分:12)

鉴于您的情况是

  

如果我的列表中有任何元素不在哈希表中

您可以在遍历元素列表时使用anyMatch来检查哈希映射值中是否不存在任何元素。

return someStrings.stream().anyMatch(val -> !myHashMap.containsValue(val))

或者将其视为{strong> someStrings的所有元素都出现在哈希图值中

return someStrings.stream().allMatch(myHashMap::containsValue);

尽管也可以在值containsAll上使用Collection进行类似的检查:

return myHashMap.values().containsAll(someStrings);

答案 1 :(得分:7)

不需要流,您可以只使用老式的Collection#removeAll()

Set<String> copy = new HashSet<>(someStrings);
copy.removeAll(myHashMap.values());

现在copy将包含myHashMap中未包含的所有值。然后,您可以对它们执行某些操作(例如迭代),或者只需调用Collection#isEmpty()来检查地图中是否全部包含