为什么不:
// 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) )



