Java 如何使用forEach和lambda表达式在多值dmap上迭代

Java 如何使用forEach和lambda表达式在多值dmap上迭代,java,foreach,lambda,java-8,Java,Foreach,Lambda,Java 8,Java 8允许使用forEach和lambda表达式在Map上进行迭代,如下所示: myMap.forEach((k, v)->{ System.out.println("Key: " + k + " Value: " + v); }); myMultiMap.forEach((k, v)->{ v.forEach(item-> foo(k, item)); }); 是否可以使用forEach和lambda表达式在多值map上迭代 UDPATE 如何使用2个字符串参数调用

Java 8允许使用
forEach
和lambda表达式在
Map
上进行迭代,如下所示:

myMap.forEach((k, v)->{ System.out.println("Key: " + k + " Value: " + v); });
myMultiMap.forEach((k, v)->{ v.forEach(item-> foo(k, item)); });
是否可以使用
forEach
和lambda表达式在
多值map
上迭代

UDPATE

如何使用2个
字符串
参数调用
多值映射的
foo

接口扩展了接口,因此有了
forEach
方法,可以使用它

new MultivaluedHashMap<String, String>()
        .forEach((String key, List<String> list)-> { ... });
在这种情况下,您不需要在lambda中编写内部
forEach

*(正如@Holder在评论中所解释的,这是错误的)

因此,只有一个正确的方法:

map.forEach((k, l) -> l.forEach( v -> foo(k, v)));
多亏了你,我才知道我到底想要什么

它可以在一行中完成,如下所示:

myMap.forEach((k, v)->{ System.out.println("Key: " + k + " Value: " + v); });
myMultiMap.forEach((k, v)->{ v.forEach(item-> foo(k, item)); });

@ksl,是的,它有一些方便的方法可以使用(比如
addAll(K key,V…newValues)
getFirst(K key)
),我想看看从多映射中使用varargs调用
foo
方法的完整解决方案。考虑到标准的Java8集合API,您必须为每个映射将列表转换为数组。也许到目前为止我还错过了另一个技巧……如果您想知道输出中的双精度
[…]]
:这看起来只是做了正确的事情,因为
foo
上的无意义类型参数
。因此,
V
被推断为
List
,每个列表都作为varargs参数的第一个参数传递,您可以像包装到另一个列表一样打印它。您甚至可以在
foo
不是varargs方法时调用它,只要
V
可以是调用者提供的任何内容。但是OP想要调用一个处理
String
s的方法。您可以避免lambda中的内部
forEach
,看看我的答案)我不能在我的应用程序中更改
foo
。它需要两个
String
s.
myMultiMap.forEach((k,l)->l.forEach(v->foo(k,v))