连接List中所有Maps的String值

Red*_*ddy 4 java lambda java-8 java-stream

我正在努力调整Lambda的功能,但是在这里和那里很少有挣扎.

List<Map<String, String>> list = new LinkedList<>();
Map<String, String> map = new HashMap<>();
map.put("data1", "12345");
map.put("data2", "45678");
list.add(map);
Run Code Online (Sandbox Code Playgroud)

我只想以逗号分隔格式打印值 12345,45678

所以这是我的审判

list.stream().map(Map::values).collect(Collectors.toList()) //Collectors.joining(",")
Run Code Online (Sandbox Code Playgroud)

而输出是[[12345,45678]].这意味着,有一个列表和内部列表,它在0索引处创建逗号分隔值.我明白为什么会这样做.

但是我没有通过如何提取我想要的结果,除非我.get(0)在表达式的末尾调用.

任何有关如何更好地使用lambdas的帮助/更多见解将会有所帮助

CKi*_*ing 7

试试这个 :

list.stream().map(Map::values).flatMap(Collection::stream).collect(Collectors.joining(","))
Run Code Online (Sandbox Code Playgroud)

flatMap方法将a扁平Collection<Stream<String>>化为单个Stream<String>.

或者,您可以尝试@Holger在评论中建议的内容.

请注意,由于您使用的是a Map,因此无法保证订单会被保留.您可能会45678,12345在最后看到输出.如果您希望保留订单,可以使用a LinkedHashMap而不是a HashMap.

  • 当然,你也可以使用`list.stream().flatMap(map - > map.values().stream())...`而不是`list.stream().map(Map :: values).flatMap( Collection :: stream)......`... (2认同)