连接列表中所有地图的字符串值
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
。
我正在尝试调整 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
。