如何验证HashMap中是否存在值
我有以下内容HashMap
,其中key
是是,String
并且value
由表示ArrayList
:
HashMap<String, ArrayList<String>> productsMap = AsyncUpload.getFoodMap();
ArrayList<String> foods
我的应用程序中还实现了另一个。
我的问题是,从我的第二个中找出我是否HashMap
包含特定内容的最佳方法是什么?String``ArrayList
我尝试过但没有成功:
Iterator<String> keySetIterator = productsMap.keySet().iterator();Iterator<ArrayList<String>> valueSetIterator = productsMap.values().iterator();
while(keySetIterator.hasNext() && valueSetIterator.hasNext()){
String key = keySetIterator.next();
if(mArrayList.contains(key)){
System.out.println("Yes! its a " + key);
}
}
回答:
为什么不:
// fast-enumerating map's valuesfor (ArrayList<String> value: productsMap.values()) {
// using ArrayList#contains
System.out.println(value.contains("myString"));
}
而且,如果您必须遍历整个ArrayList<String>
,而不是只寻找一个特定值:
// fast-enumerating food's values ("food" is an ArrayList<String>)for (String item: foods) {
// fast-enumerating map's values
for (ArrayList<String> value: productsMap.values()) {
// using ArrayList#contains
System.out.println(value.contains(item));
}
}
过去,我用一些Java 8惯用语对此进行了更新。
Java 8流API允许使用更具声明性(并且可以说是优雅的)的方式来处理这些类型的迭代。
例如,这是一种实现方法(略为冗长):
// iterate foods foods
.stream()
// matches any occurrence of...
.anyMatch(
// ... any list matching any occurrence of...
(s) -> productsMap.values().stream().anyMatch(
// ... the list containing the iterated item from foods
(l) -> l.contains(s)
)
)
…这是实现相同目的的一种更简单的方法,最初是迭代productsMap
值而不是内容foods
:
// iterate productsMap valuesproductsMap
.values()
.stream()
// flattening to all list elements
.flatMap(List::stream)
// matching any occurrence of...
.anyMatch(
// ... an element contained in foods
(s) -> foods.contains(s)
)
以上是 如何验证HashMap中是否存在值 的全部内容, 来源链接: utcz.com/qa/405131.html