我有以下几点:
Map<String, String[]> params = getSrcMap();我需要转换成MultiValueMap。我尝试过:
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<String, String[]>(params);它不能像写的那样被解析(不编译)。感谢你的点子。谢谢
发布于 2021-04-09 02:24:46
这非常简单,并且使用甚至不需要Java 8流的代码:
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
for (Entry<String, String[]> entry : params.entrySet())
multiValueMap.put(entry.getKey(), Arrays.asList(entry.getValue()));发布于 2021-04-09 02:20:52
copy constructor要求值类型是列表,而不是数组。你需要先转换你的地图。下面是一种处理流的方法:
Map<String, List<String>> params = getSrcMap()
.entrySet()
.stream()
.collect(Collectors.toMap(Entry::getKey, e -> Arrays.asList(e.getValue())));或者,如果你有一个像Guava这样的库,你可以用一个函数来转换地图:
Map<String, List<String>> params = Maps.transformValues(getSrcMap(), Arrays::asList);或者只是创建一个空地图并手动填充它:
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
getSrcMap().forEach((key, values) -> {
for (String value : values) {
multiValueMap.put(key, value);
}
});发布于 2021-04-09 02:15:27
您可以将Map<String, String[]>转换为Map<String, List<String>>,以便可以将其直接传递给LinkedMultiValueMap的构造函数。
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>(
params.entrySet().stream().collect(
Collectors.toMap(Map.Entry::getKey, e -> Arrays.asList(e.getValue()))));https://stackoverflow.com/questions/67009462
复制相似问题