Java 8:将 Map<String, List<String>> 转换为 Map<String, String[]> [重复]

Posted

技术标签:

【中文标题】Java 8:将 Map<String, List<String>> 转换为 Map<String, String[]> [重复]【英文标题】:Java 8: Converting Map<String, List<String>> to Map<String, String[]> [duplicate] 【发布时间】:2020-03-17 10:33:27 【问题描述】:
Map<String, List<String>> parameters;

Map<String, String[]> collect = parameters.entrySet().stream()
                .collect(Collectors.toMap(entry-> entry.getKey(),entry -> entry.getValue().toArray()));

我收到编译器错误无法解析方法“getKey()”

【问题讨论】:

【参考方案1】:

您应该创建一个正确类型的数组(即 String[] 而不是 Object[]):

Map<String, String[]> collect = 
    parameters.entrySet()
              .stream()
              .collect(Collectors.toMap(Map.Entry::getKey,
                                        entry -> entry.getValue().toArray(new String[0])));

【讨论】:

【参考方案2】:

你必须使用:

.toArray(String[]::new)

而不仅仅是:

.toArray()

因为这个返回 Object[] 而不是 String[]

正如 cmets 中所讨论的,我的解决方案可以从 Java11 开始有效

【讨论】:

以上是关于Java 8:将 Map<String, List<String>> 转换为 Map<String, String[]> [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java 将 Map<String,Set<String>> 转换为 Map<String,Set<Object1>> [关闭]

使用 java 8 流转换 List<Map<String,String>> 与“,”分隔的字符串值

在java 8中将地图映射转换为单个值列表[关闭]

地图中的 Java 8 流过滤器地图 -- Map<String,Map<String,Employee>>

使用java 8流将字符串替换为哈希图值

java 集合