将 Map<String, String[]> 转换为 MultiValueMap<String, String>
Convert a Map<String, String[]> to a MultiValueMap<String, String>
我有以下内容;
Map<String, String[]> params = getSrcMap();
我需要转换为 MultiValueMap 。我尝试过:
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<String, String[]>(params);
无法按书面方式解析(不编译)。感谢您的想法。谢谢
您可以将 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()))));
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);
}
});
非常简单,代码甚至不需要 Java 8 个流:
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
for (Entry<String, String[]> entry : params.entrySet())
multiValueMap.put(entry.getKey(), Arrays.asList(entry.getValue()));
我有以下内容;
Map<String, String[]> params = getSrcMap();
我需要转换为 MultiValueMap
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<String, String[]>(params);
无法按书面方式解析(不编译)。感谢您的想法。谢谢
您可以将 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()))));
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);
}
});
非常简单,代码甚至不需要 Java 8 个流:
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
for (Entry<String, String[]> entry : params.entrySet())
multiValueMap.put(entry.getKey(), Arrays.asList(entry.getValue()));