【发布时间】:2020-09-04 19:15:36
【问题描述】:
下面的代码 sn-p 接受多值映射并转换为映射。现在我希望地图使用流返回具有值 List 的 Map。
public static Map<String, String> decodeMap(MultiValueMap<String, String> multi) {
if (CollectionUtils.isEmpty(multi)) {
return Map.of();
}
Map<String, String> map = new HashMap<>(multi.entrySet().size());
for (Map.Entry<String, List<String>> entry : multi.entrySet()) {
StringBuilder sb = new StringBuilder();
for (String s : entry.getValue()) {
if (sb.length() > 0) {
sb.append(',');
}
sb.append(s);
}
map.put(entry.getKey(), sb.toString());
}
return map;
}
这是我尝试过的,但效果不错:
Map<String, List<Long>> map = multi.entrySet().stream()
.filter(f -> multi.containsKey("employee"))
.collect(Collectors.toMap(Entry ::getKey,Collectors.mapping(e -> Long.parseLong(e.getValue()), Collectors.toList())));
提前谢谢你!
【问题讨论】:
-
e.getValue()是字符串,但你想存储在 Integer 的集合中,你如何定义 map 的List<Long>?也许你应该使用Map<String, List<String>> -
除此之外 -
.filter(f -> multi.containsKey("employee"))与您共享的命令式方法中的任何行都没有关系,并且预期的类型也从Map<String, String>更改为Map<String, List<Long>> -
在您的帖子中添加示例输入和输出,以明确您想要什么。
-
您发布的代码中没有
parseLong。您应该发布您尝试过的内容以及错误描述。 -
问题中发布的代码尝试将结果分配给
Map<String, List<Long>>,而没有尝试将String转换为Long。当然,它没有通过编译器,需要修复。如果你保持原样,那就是答案。这将无济于事,因为您在评论中发布了您已经尝试插入parseLong调用并遇到错误,因此您应该帮自己一个忙并更改问题以准确显示您尝试了什么以及您遇到了哪个错误。
标签: java spring dictionary java-stream