Concatenate the String values of all Maps in a List

纵饮孤独 提交于 2019-12-07 09:51:13

问题


I am trying to adapt Lambda features, however few struggles here and there.

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

I just want to print the values in comma separated format like 12345,45678

So here goes my trial

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

and the output is [[12345,45678]]. It means, there's a list and inside list it's creating the comma separated value at 0 index. I do understand why it's doing though.

But I didn't get through how to extract my desired result unless I call .get(0) in the end of that expression.

Any help/some more insights on how to use lambdas better will be helpful


回答1:


Try this :

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

The flatMap method flattens out a Collection<Stream<String>> into a single Stream<String>.

Alternately, you can try what @Holger suggested in the comments.

Note that since you are using a Map, there is no guarantee that the order will be preserved. You might see the output as 45678,12345 at your end. If you wish to preserve the order, you can use a LinkedHashMap instead of a HashMap.



来源:https://stackoverflow.com/questions/31056919/concatenate-the-string-values-of-all-maps-in-a-list

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!