我在List<String>
中有一个java
,其中包含一些字符串。
我也有一个带有hashmap
值的String
,我想检查一下列表中是否有Hashmap中没有的元素。这是我写的代码:
List<String> someStrings = fetchData();
if (someStrings.stream().noneMatch(s -> myHashMap.containsValue(s))) {
return false;
}
return true;
但是它不能正常工作。你能帮我吗?
答案 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()
来检查地图中是否全部包含