如何验证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 values

for (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 values

productsMap

.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

回到顶部