我有一个功能:
private HashMap<String,String> getProperties(HttpServletRequest request) {
Stream<Map.Entry<String,String>> s = request.getParameterMap().entrySet().stream();
return s.collect(HashMap::new, (map, e)->map.put(e.getKey(), e.getValue()), HashMap::putAll);
}
它运行正常,但在开始时我曾试图像大多数Java 8程序员那样将它链接在一起:
private HashMap<String,String> getProperties(HttpServletRequest request) {
return request.getParameterMap().entrySet().stream().collect(HashMap::new, (map, e)->map.put(e.getKey(), e.getValue()), HashMap::putAll);
}
有编译错误,有人可以解释一下吗?是否有解决所有呼叫的解决方法?
答案 0 :(得分:0)
试试这个(假设只有一对一的映射)。
但我建议你使用Map&lt;&gt;作为返回类型。
private HashMap<String,String> getProperties(HttpServletRequest request) {
return request.getParameterMap().entrySet().stream()
.filter(e -> e.getValue() != null && e.getValue().length > 0)
.map(e -> new SimpleEntry<>(e.getKey(), e.getValue()[0])) // This is part where you are sure that only one-to-one parameter value
.collect(Collectors.toMap(Entry::getKey, Entry::getValue, (v1, v2) -> v2, HashMap::new));
}
答案 1 :(得分:0)
看起来像你想要的(如果你想要一个 private static HashMap<String, String> getProperties(HttpServletRequest request) {
return request.getParameterMap()
.entrySet()
.stream()
.collect(Collectors.toMap(
Entry::getKey,
e -> e.getValue()[0],
(left, right) -> {
throw new AssertionError("more than two entries in the array");
},
HashMap::new));
}
作为返回类型),但这假设该值数组将具有单个值
<img src="smiley.gif" srcset="alternatve.gif" width="32" height="32" />