连接列表中所有地图的字符串值

Concatenate the String values of all Maps in a List

我正在尝试调整 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)

任何 help/some 关于如何更好地使用 lambda 的更多见解都会有所帮助

试试这个:

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

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

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

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