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

时间:2019-11-21 13:08:30

标签: java java-8 casting hashmap java-stream

Map<String, List<String>> parameters;

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

我遇到编译器错误,无法解析方法'getKey()'

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

您必须使用:

.toArray(String[]::new)

不仅仅是:

.toArray()

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

如评论中所述,我的解决方案可以从Java11

开始有效