首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Map<String,String[]>转换为MultiValueMap<String,String>

将Map<String,String[]>转换为MultiValueMap<String,String>
EN

Stack Overflow用户
提问于 2021-04-09 01:59:07
回答 3查看 471关注 0票数 0

我有以下几点:

代码语言:javascript
复制
Map<String, String[]> params = getSrcMap();

我需要转换成MultiValueMap。我尝试过:

代码语言:javascript
复制
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<String, String[]>(params);

它不能像写的那样被解析(不编译)。感谢你的点子。谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-04-09 02:24:46

这非常简单,并且使用甚至不需要Java 8流的代码:

代码语言:javascript
复制
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
for (Entry<String, String[]> entry : params.entrySet())
    multiValueMap.put(entry.getKey(), Arrays.asList(entry.getValue()));
票数 1
EN

Stack Overflow用户

发布于 2021-04-09 02:20:52

copy constructor要求值类型是列表,而不是数组。你需要先转换你的地图。下面是一种处理流的方法:

代码语言:javascript
复制
Map<String, List<String>> params = getSrcMap()
        .entrySet()
        .stream()
        .collect(Collectors.toMap(Entry::getKey, e -> Arrays.asList(e.getValue())));

或者,如果你有一个像Guava这样的库,你可以用一个函数来转换地图:

代码语言:javascript
复制
Map<String, List<String>> params = Maps.transformValues(getSrcMap(), Arrays::asList);

或者只是创建一个空地图并手动填充它:

代码语言:javascript
复制
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
getSrcMap().forEach((key, values) -> {
    for (String value : values) {
        multiValueMap.put(key, value);
    }
});
票数 3
EN

Stack Overflow用户

发布于 2021-04-09 02:15:27

您可以将Map<String, String[]>转换为Map<String, List<String>>,以便可以将其直接传递给LinkedMultiValueMap的构造函数。

代码语言:javascript
复制
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>(
       params.entrySet().stream().collect(
          Collectors.toMap(Map.Entry::getKey, e -> Arrays.asList(e.getValue()))));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67009462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档