Java8 : Transform Map<String, List<String>> 通过连接值进入 Map<String,String>

标签 java java-stream

我有一个 Map<String, List<String>>我想把它变成一个 Map<String, String> ,结果的值将是 String.join(" - ", values)第一张 map 的值。

我知道怎么做:

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>;
}

我该怎么做?

最佳答案

无需分组。只需将条目收集到一个新的 Map 中:

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

关于Java8 : Transform Map<String, List<String>> 通过连接值进入 Map<String,String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42948235/

相关文章:

java - 如何使用 Intent 添加日历事件?

java - 使用 HtmlUnit 或其他 java 工具抓取 flash

java - JFrame 上的 String 和 BufferedImage

java - 在 Java8 中使用 lambda 排序和创建映射

java - 根据条件创建特定类型的数组

java - 正确终止java流

java-8 - 如何在 Java 8 中将列表转换为集合(避免重复)?

java - 如何将窗口内容保存为图像

Java 网格布局

java - 将每个转换为 if else 流式传输