List<Map<String,List>>集合结构的遍历处理

这篇博客探讨了如何表示和处理List<Map<String,List>>类型的JSON数据。内容涉及到JSON数组中的Map数据结构,其中键为字符串,值为字符串列表。示例展示了如何遍历这种复杂的数据结构,提取并处理每个Map中的List元素,特别是当List非空时进行逐个元素的遍历。

1、List<Map<String,List>>的json数据表示形式

如下所示,Json数据整体是一个json数组的形式,数组内的每一个元素是Map数据形式,map数据形式中,key是字符串,value同时又是一个数组的形式

"fxjg": [
            {
                "reter": [
                    "/1/1.jpg",
                    "/1/2.jpg",
                    "/1/3.jpg",
                    "/1/4.jpg",
                    "/1/5.jpg"
                ]
            },
            {
                "crehgrytj": [
                    "/1/1.jpg",
                    "/1/2.jpg",
                    "/1/3.jpg",
                    "/1/4.jpg",
                    "/1/5.jpg"
                ]
            },
            {
                "fergrtrh": []
            }
        ],

2、此数据结构的遍历处理形式如下:


List<Map<String, List>> list;
        for (int i = 0; i < list.size(); i++) {//遍历传进来的list,得到的每一项list.get(i)是一个map集合
            for (Map.Entry<String, List> entry : list.get(i).entrySet()) {//遍历map集合
                List<String> valueList = entry.getValue();//便利出来的value值类型是list集合
                if (!CollectionUtils.isEmpty(valueList)) {//如果list集合非空
                    for (int j = 0; j < valueList.size(); j++) {//遍历entry.getValue(),得到的每一项就是路径,如/1/3.jpg
                    }
                }
            }
        }
### Java Stream API 遍历 `List<Map<String, String>>` 示例 以下是一个使用 Java Stream API 遍历 `List<Map<String, String>>` 的完整示例代码。此代码展示了如何提取每个 `Map` 中的键值对,并将它们打印出来[^1]。 ```java import java.util.*; import java.util.stream.Collectors; public class StreamExample { public static void main(String[] args) { // 创建一个 List<Map<String, String>> 示例集合 List<Map<String, String>> list = new ArrayList<>(); Map<String, String> map1 = new HashMap<>(); map1.put("001", "西安"); map1.put("002", "宝鸡"); Map<String, String> map2 = new HashMap<>(); map2.put("01", "北京"); map2.put("02", "石家庄"); list.add(map1); list.add(map2); // 使用 Stream API 遍历并打印每个 Map 的键值对 list.stream() .flatMap(map -> map.entrySet().stream()) // 将每个 Map 转换为 Entry 流 .forEach(entry -> System.out.println("key:" + entry.getKey() + " value:" + entry.getValue())); // 打印键值对 } } ``` 上述代码中,`flatMap` 方法用于将每个 `Map` 转换为 `Entry` 流,然后通过 `forEach` 方法遍历并打印每个键值对[^1]。 如果需要将所有键或值提取到一个新的列表中,可以使用以下代码: ```java // 提取所有键到一个 List<String> List<String> allKeys = list.stream() .flatMap(map -> map.keySet().stream()) // 获取每个 Map 的键集合并转换为流 .collect(Collectors.toList()); // 收集为 List // 提取所有值到一个 List<String> List<String> allValues = list.stream() .flatMap(map -> map.values().stream()) // 获取每个 Map 的值集合并转换为流 .collect(Collectors.toList()); // 收集为 List System.out.println("All Keys: " + allKeys); // 打印所有键 System.out.println("All Values: " + allValues); // 打印所有值 ``` 上述代码展示了如何使用 `Stream API` 提取 `List<Map<String, String>>` 中的所有键和值,并将它们收集到新的 `List<String>` 中[^3]。 如果需要对键值对进行过滤操作(例如只保留某些特定条件的键值对),可以结合 `filter` 方法实现: ```java // 过滤出 key 以 "0" 开头的键值对 list.stream() .flatMap(map -> map.entrySet().stream()) .filter(entry -> entry.getKey().startsWith("0")) // 过滤条件 .forEach(entry -> System.out.println("Filtered key:" + entry.getKey() + " value:" + entry.getValue())); ``` 上述代码展示了如何使用 `filter` 方法对键值对进行条件过滤[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YD_1989

分享不易,非常感谢您的鼓励支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值