连接List中所有Maps的String值

时间:2015-06-25 17:28:08

标签: 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);

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

所以这是我的试用

list.stream().map(Map::values).collect(Collectors.toList()) //Collectors.joining(",")

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

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

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

1 个答案:

答案 0 :(得分:7)

试试这个:

list.stream().map(Map::values).flatMap(Collection::stream).collect(Collectors.joining(","))

flatMap方法将Collection<Stream<String>>展平为单个Stream<String>

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

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