例如
Map<String, List<String>> headers = connection.getHeaderFields();
for (String key: headers.keySet()){
for (String value: headers.get(key)){
System.out.println(key+":"+value);
}
}
这段代码可以这样更改为(方法参考)吗?
Consumer<String> consumer = headers::get;
headers.keySet().forEach(consumer);
但这不正确。我认为有办法做到这一点:
Consumer<String> consumer = headers::get;
BiConsumer<String, String> header = (key, value) -> System.out.println(key+":"+value);
我的确是对的吗?
答案 0 :(得分:2)
看起来您可以使用flatMap
:
headers.entrySet().stream()
.flatMap(k -> k.getValue().stream().map(v -> k + ":" + v))
.forEach(System.out::println);
关于Consumer
和BiConsumer
的问题,它完全错过了 - 这些只是功能接口,只能用于表示功能 - 它们需要传递到某个地方才能使用
答案 1 :(得分:0)
首先,将这些for
循环更改为地图条目上的循环以提高效率(Q&A on iterating maps in Java):
for (Map.Entry<String, List<String>> entry : headers.entrySet()){
for (String value: entry.getValue()){
System.out.println(entry.getKey()+":"+value);
}
}
现在您已准备好将其转换为基于流的迭代:
headers.entrySet().forEach(entry -> {
entry.getValue().forEach(value -> System.out.println(entry.getKey()+":"+value))
});
答案 2 :(得分:0)
你可以使用这样的东西
headers.forEach((key, value) -> {
value.forEach((current) -> {
System.out.println(key + ":" + current);
});
});