如何在Java 8中将Map <String,List <String>>转换为Map <String,String>?

5

我有一个如下的 map

key= ["a1", "a2", "a3"] 
value = [["a1.value1", "a1.value2"],["a2.value1", "a2.value2"]]

生成的地图应该是这样的:
key = ["a1", "a2", "a3"]
value = ["a1.value1, a1.value2", "a2.value1, a2.value2"]

我们如何使用Collectors.joining作为中间步骤?

欢迎来到 Stack Overflow!请参观我们的[tour]和[help],了解本站适合哪些问题。如果您可以[edit]您的问题以符合本站的要求,请这样做。 - Joe C
3
您的问题我不太明白……您是想在一个Map中将多个值映射到同一个键上,也就是说,在特定的键上有多个Map条目吗?在Java中,Map的键是一个集合,意味着不能重复使用单个键值。我的理解是否正确? - John Camerin
1个回答

7
我们如何将Collectors.joining用作中间步骤?
你的意思是,在收集阶段中吗...
是的,可以:
Map<String, String> result = 
        source.entrySet()
              .stream()
              .collect(toMap(Map.Entry::getKey, 
                      e -> e.getValue().stream().collect(joining(", "))));

但是,最好使用String.join

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

或者没有数据流变量:
Map<String, String> resultSet = new HashMap<>();
source.forEach((k, v) -> resultSet.put(k, String.join(",", v)));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接