Java8:转换映射<string,list <string>&gt;通过连接值到Map <string,string>

时间:2017-03-22 09:59:38

标签: java java-stream

我有一个Map<String, List<String>>,我想将其转换为Map<String, String>,结果的值将是第一个地图值的String.join(" - ", values)

我知道如何这样做:

public Map<String,String> flatten( Map<String, List<String>> attributes) {
      Map<String, String> map = new HashMap<>();
      attributes.forEach((k,v) -> map.put( k, String.join(" - ", v)));
      return map;
}

但是我想摆脱new HashMap<>()并直接对输入进行转换 我怀疑是collect(Collectors.groupingBy( something ) ),但我无法弄明白。{ 我想要的是这样的:

public Map<String,String> flatten( Map<String, List<String>> attributes) {
    return attributes.entrySet().stream().<something>;
}

我该怎么做?

1 个答案:

答案 0 :(得分:5)

无需分组。只需将条目收集到新的Map

Map<String, String> map = 
    attributes.entrySet()
              .stream()
              .collect(Collectors.toMap(Map.Entry::getKey,
                                        e-> String.join(" - ", e.getValue())));