如何使用Stream迭代List<Map<String, String>>
当然可以用Stream实现这个迭代逻辑!
你原来的嵌套循环写法是这样的:
for (Map<String, String> temp1 : maps) { for(Map.Entry<String, String> temp2 : temp1.entrySet()) { // 这里是你对每个entry的处理逻辑 } }
用Java Stream完全可以实现等价的迭代,而且写法更简洁,还能方便地添加中间操作(比如过滤、映射)。核心是用flatMap把外层List中每个Map的entrySet“扁平化”成一个连续的流,然后用forEach处理每个Entry:
maps.stream() .flatMap(map -> map.entrySet().stream()) .forEach(entry -> { // 这里写你对每个entry的处理逻辑,比如打印键值对: // System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue()); });
简单解释下这个Stream流程:
maps.stream():把外层的List<Map<String,String>>转换成Stream<Map<String,String>>flatMap(map -> map.entrySet().stream()):把每个Map转换成它的entrySet的Stream,然后将所有这些小流合并成一个大的Stream<Map.Entry<String,String>>,这样就实现了原来嵌套循环的效果forEach(...):遍历每个Entry,执行你的业务逻辑
如果之后需要扩展功能,比如只想处理键为"name"的Entry,直接在中间加个filter就行,非常灵活:
maps.stream() .flatMap(map -> map.entrySet().stream()) .filter(entry -> "name".equals(entry.getKey())) .forEach(entry -> System.out.println("Name value: " + entry.getValue()));
内容的提问来源于stack exchange,提问作者JavaLearner1
相关产品推荐
相关产品推荐

