我正在努力调整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的任何帮助/更多见解将会有所帮助
答案 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
。