List<Map<String, Object>>,Map<String,List<Map<String, Object>>>多方式循环遍历

news2025/8/12 4:05:42

多方式循环遍历

  • 1. List<Map<String, Object>>多方式循环
  • 测试结果
  • 2. Map<String,List<Map<String, Object>>>
  • 测试结果

☀️相关笔记章节:
🌹java 1.8 stream使用总结(个人总结有一些经典文章的集合)
🌹遍历 ArrayList和遍历 Map的几种方式
🌹Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)
🌹List,Map多层循环嵌套Demo及其理解
🌹List,Map 三种遍历方式:(总结理解)
🌹List<Map<String, Object>>,Map<String,List<Map<String, Object>>>多方式循环遍历
在这里插入图片描述

1. List<Map<String, Object>>多方式循环

package com.example.democrud.democurd.Prototype.demo01;

import java.util.*;

public class Demo5 {


    public static void main(String[] args) {

        //公共参数
        List<Map<String, Object>> maps = ListmapTest();

        //第一种方式 for循环
        forTest(maps);
        //第二种方式 for迭代循环
        iteratorTest(maps);

        entrySetTest(maps);
    }

    public static void entrySetTest(List<Map<String, Object>> maps) {


        /**
         * entrySet()
         将原有Map集合中的键值作为一个整体返回Set集合
         再将包含键值对对象的Set集合转化为Iterator接口对象,
         然后获取集合中的所有的键值对映射关系,
         在从映射关系中取出键和值
         *
         */
        for (Map<String, Object> map : maps) {
            Set<Map.Entry<String, Object>> entries = map.entrySet();

            for (Map.Entry<String, Object> entry : entries) {


                String key = entry.getKey();
                String value = entry.getValue().toString();
                System.out.println("Key的值==》" + key);
                System.out.println("value的值==》" + value);
            }


        }
        System.out.println("-----------------分隔符---------entrySet()------↑↑↑↑↑↑↑------");
    }


    /**
     * for迭代循环
     *
     * @param maps
     */
    public static void iteratorTest(List<Map<String, Object>> maps) {
        for (int i = 0; i < maps.size(); i++) {
            Map<String, Object> stringObjectMap = maps.get(i);
            System.out.println(stringObjectMap);

            Iterator<String> iterator = stringObjectMap.keySet().iterator();
            while (iterator.hasNext()) {
                String next = iterator.next();
                System.out.println("key=>" + next);
                String value = stringObjectMap.get(next).toString();
                System.out.println("value=>" + value);
            }

        }


        System.out.println("-----------------分隔符---------for迭代循环----↑↑↑↑↑↑↑--------");


    }


    /**
     * for循环
     *
     * @param maps
     */
    public static void forTest(List<Map<String, Object>> maps) {

        for (Map<String, Object> map : maps) {
            //KeySet(): 返回map中所有key值的列表。
            for (String s : map.keySet()) {
                System.out.println("key的值  :" + s + "\t");
                //根据对应的key获取到map的值
                System.out.println(map.get(s));

            }

        }
        System.out.println("-----------------分隔符--------for循环------↑↑↑↑↑↑↑-------");
    }


    /**
     * 公共参数接口
     *
     * @return
     */
    public static List<Map<String, Object>> ListmapTest() {

        //List 中包含多个map
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

        List<String> list1 = new ArrayList<String>();
        List<String> list2 = new ArrayList<String>();
        List<String> list3 = new ArrayList<String>();
        List<String> list4 = new ArrayList<String>();


        Map<String, Object> hashMap = new HashMap<String, Object>();
        list1.add("我喜欢代丽1号");
        list2.add("我喜欢代丽2号");
        hashMap.put("小龙1", list1);
        hashMap.put("小龙2", list2);
        list.add(hashMap);

        Map<String, Object> hashMap1 = new HashMap<String, Object>();
        list3.add("我喜欢代丽3号");
        list4.add("我喜欢代丽4号");
        hashMap1.put("小龙3", list3);
        hashMap1.put("小龙4", list4);
        list.add(hashMap1);


        System.out.println("公共参数为==>" + list);
        System.out.println("-----------------分隔符------公共接口--------↑↑↑↑↑↑↑-------");
        return list;
    }

}

在这里插入图片描述

测试结果

公共参数为==>[{小龙2=[我喜欢代丽2], 小龙1=[我喜欢代丽1]}, {小龙3=[我喜欢代丽3], 小龙4=[我喜欢代丽4]}]
-----------------分隔符------公共接口--------↑↑↑↑↑↑↑-------
key的值  :小龙2	
[我喜欢代丽2]
key的值  :小龙1	
[我喜欢代丽1]
key的值  :小龙3	
[我喜欢代丽3]
key的值  :小龙4	
[我喜欢代丽4]
-----------------分隔符--------for循环------↑↑↑↑↑↑↑-------
{小龙2=[我喜欢代丽2], 小龙1=[我喜欢代丽1]}
key=>小龙2
value=>[我喜欢代丽2]
key=>小龙1
value=>[我喜欢代丽1]
{小龙3=[我喜欢代丽3], 小龙4=[我喜欢代丽4]}
key=>小龙3
value=>[我喜欢代丽3]
key=>小龙4
value=>[我喜欢代丽4]
-----------------分隔符---------for迭代循环----↑↑↑↑↑↑↑--------
Key的值==》小龙2
value的值==[我喜欢代丽2]
Key的值==》小龙1
value的值==[我喜欢代丽1]
Key的值==》小龙3
value的值==[我喜欢代丽3]
Key的值==》小龙4
value的值==[我喜欢代丽4]
-----------------分隔符---------entrySet()------↑↑↑↑↑↑↑------

2. Map<String,List<Map<String, Object>>>

package com.example.democrud.democurd.Prototype.demo01;

import java.util.*;

public class demo6 {


    //Map<String,List<Map<String, Object>>>

    public static void main(String[] args) {
        //原数据
        Map<String, List<Map<String, Object>>> friend = friend();

        //for循环
        forTest(friend);
        System.out.println("\t");
        iteratorTest(friend);

    }

    /**
     * @param friend
     */
    public static void iteratorTest(Map<String, List<Map<String, Object>>> friend) {


/**
 * map.entrySet().iterator();
 * 首先是map.entrySet()是把HashMap类型的数据转换成集合类型;
 * 然后是获得map的迭代器,用作遍历map中的每一个键值对;
 * iterator()是去获得这个集合的迭代器,保存在iter里面;
 */

        Iterator<Map.Entry<String, List<Map<String, Object>>>> iterator = friend.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, List<Map<String, Object>>> next = iterator.next();
            System.out.println("获取到2租数据朋友和前女友的集合==>" + next);
            //上面现在已经map了 可以在迭代循环下
            //扩展k,v 方式
            String key = next.getKey();
            String value = next.getValue().toString();
            System.out.println("分别获取k,v的值==>" + key + "-*-" + value);
            //扩展结束
            //已经拿到最外层的key 了我们需要继续拆分里面的v的值 可以看到他是list的集合
            Iterator<Map<String, Object>> iterator1 = friend.get(key).iterator();
            while (iterator1.hasNext()) {
                Map<String, Object> next1 = iterator1.next();
                System.out.println(next1);

                Set<Map.Entry<String, Object>> entries = next1.entrySet();
                for (Map.Entry<String, Object> entry : entries) {
                    System.out.println("最后的数据==>" + entry);
                }

            }


        }
        System.out.println("\t");
        System.out.println("-----------------分隔符--------iterator------↑↑↑↑↑↑↑-------");


    }


    /**
     * for循环
     *
     * @param friend
     */

    public static void forTest(Map<String, List<Map<String, Object>>> friend) {

        //KeySet(): 返回map中所有key值的列表。
        for (String s : friend.keySet()) {
            System.out.println("key值" + s);
            for (Map<String, Object> map : friend.get(s)) {
                System.out.println("value" + map);
                for (String s1 : map.keySet()) {
                    String o = map.get(s1).toString();
                    System.out.println("==》key :" + s1 + "==》value :" + o);
                }
            }
        }
        System.out.println("\t");
        System.out.println("-----------------分隔符--------for循环------↑↑↑↑↑↑↑-------");

    }

    /**
     * 原始数据
     *
     * @return
     */
    public static Map<String, List<Map<String, Object>>> friend() {


        Map<String, Object> map = new HashMap<>();
        Map<String, Object> map1 = new HashMap<>();
        Map<String, Object> map2 = new HashMap<>();
        Map<String, Object> map3 = new HashMap<>();
        Map<String, Object> map4 = new HashMap<>();

        //=后面new ArrayList<>() 取前面最外层的属性
        List<Map<String, Object>> maps = new ArrayList<>();
        List<Map<String, Object>> maps1 = new ArrayList<>();

        //最外层数据
        Map<String, List<Map<String, Object>>> yanwc = new HashMap<>();


        map.put("name", "文超");
        map.put("age", 25);
        map.put("gender", "男");

        map1.put("name", "吊毛");
        map1.put("age", 28);
        map1.put("gender", "男");

        map2.put("name", "老黄");
        map2.put("age", 26);
        map2.put("gender", "男");


        map3.put("name", "代丽");
        map3.put("age", 27);
        map3.put("gender", "女");

        map4.put("name", "何晶");
        map4.put("age", 27);
        map4.put("gender", "女");


        maps.add(map);
        maps.add(map1);
        maps.add(map2);
        maps1.add(map3);
        maps1.add(map4);


        yanwc.put("friend", maps);
        yanwc.put("girlfriend", maps1);


        System.out.println("yanwc的数据==》" + yanwc);
        System.out.println("-----------------分隔符--------数据展示------↑↑↑↑↑↑↑-------");


        return yanwc;
    }

}

在这里插入图片描述
在这里插入图片描述

测试结果

yanwc的数据=={girlfriend=[{gender=, name=代丽, age=27}, {gender=, name=何晶, age=27}], friend=[{gender=, name=文超, age=25}, {gender=, name=吊毛, age=28}, {gender=, name=老黄, age=26}]}
-----------------分隔符--------数据展示------↑↑↑↑↑↑↑-------
key值girlfriend
value{gender=, name=代丽, age=27}
==》key :gender==》value :女
==》key :name==》value :代丽
==》key :age==》value :27
value{gender=, name=何晶, age=27}
==》key :gender==》value :女
==》key :name==》value :何晶
==》key :age==》value :27
key值friend
value{gender=, name=文超, age=25}
==》key :gender==》value :男
==》key :name==》value :文超
==》key :age==》value :25
value{gender=, name=吊毛, age=28}
==》key :gender==》value :男
==》key :name==》value :吊毛
==》key :age==》value :28
value{gender=, name=老黄, age=26}
==》key :gender==》value :男
==》key :name==》value :老黄
==》key :age==》value :26
	
-----------------分隔符--------for循环------↑↑↑↑↑↑↑-------
	
获取到2租数据朋友和前女友的集合==>girlfriend=[{gender=, name=代丽, age=27}, {gender=, name=何晶, age=27}]
分别获取k,v的值==>girlfriend-*-[{gender=, name=代丽, age=27}, {gender=, name=何晶, age=27}]
{gender=, name=代丽, age=27}
最后的数据==>gender=女
最后的数据==>name=代丽
最后的数据==>age=27
{gender=, name=何晶, age=27}
最后的数据==>gender=女
最后的数据==>name=何晶
最后的数据==>age=27
获取到2租数据朋友和前女友的集合==>friend=[{gender=, name=文超, age=25}, {gender=, name=吊毛, age=28}, {gender=, name=老黄, age=26}]
分别获取k,v的值==>friend-*-[{gender=, name=文超, age=25}, {gender=, name=吊毛, age=28}, {gender=, name=老黄, age=26}]
{gender=, name=文超, age=25}
最后的数据==>gender=男
最后的数据==>name=文超
最后的数据==>age=25
{gender=, name=吊毛, age=28}
最后的数据==>gender=男
最后的数据==>name=吊毛
最后的数据==>age=28
{gender=, name=老黄, age=26}
最后的数据==>gender=男
最后的数据==>name=老黄
最后的数据==>age=26
	
-----------------分隔符--------iterator------↑↑↑↑↑↑↑-------

分享结束;大家有不会或者不理解的可以留言提出;秒回哦;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL8.0优化 - 优化MySQL服务器、优化MySQL的参数、优化数据类型

文章目录学习资料优化MySQL服务器优化服务器硬件配置较大的内存配置高速磁盘系统合理分布磁盘I/O配置多处理器优化MySQL的参数innodb_buffer_pool_sizekey_buffer_sizetable_cachequery_cache_sizequery_cache_typesort_buffer_sizejoin_buffer_sizeread_buffer_sizeinnodb_flu…

RabbitMQ初步到精通-第四章-RabbitMQ工作模式-SIMPLE

RabbitMQ工作模式-SIMPLE模式 1.模式介绍 这是最简单的一个模式了&#xff0c;一般在实际的生产环境中&#xff0c;大家应该都不会使用一个消费者。只做入门的介绍。 一个生产者&#xff0c;一个默认的交换机【图中没体现】&#xff0c;一个队列&#xff0c;一个消费者。 生产…

【Java技术专题】「Java8技术盲区」函数接口字典-看看还有哪些你所不知道函数接口

函数接口的定义 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法&#xff0c;但是可以有多个非抽象方法的接口。 函数接口的特点 函数式接口可以被隐式转换为lambda表达式。 Lambda表达式和方法引用&#xff08;实际上也可认为是Lambda表达式&#xff09;上。 …

子序列宽度之和

目录题目1. 子序列2. 子序列找最大最小值3. 代码题目 一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。 给你一个整数数组 nums &#xff0c;返回 nums 的所有非空 子序列 的 宽度之和 。由于答案可能非常大&#xff0c;请返回对 109 7 取余 后的结果。 子序列 定义…

[附源码]java毕业设计农业种植管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

IDEA中给源码添加自己注释——private-notes插件安装使用

一、前言 我们在空闲之余喜欢研究一些经典框架的源码&#xff0c;发现没办法把自己的注释添加上。 会给出提示&#xff1a;File is read-only 很烦&#xff0c;但是为了安全考虑也是没有办法的&#xff01; 这是一个大佬就写了一个IDEA插件&#xff0c;让我们摆脱了这个烦恼&a…

U2-Net 使用嵌套 U 结构进行更深入的显着目标检测

在给定图像中分割不同的对象一直是计算机视觉领域的一项众所周知的任务。多年来,我们已经看到自编码器到疯狂的深度学习模型(如 Deeplab)被用于语义分割。在所有模型的深海中,仍然有一个名字排在最前面,它就是U-Net。U-Net 于 2018 年发布,此后获得了巨大的普及,并以某种…

Android入门第30天-Android里的Toast的使用

介绍 本篇带来的是&#xff1a; Android用于提示信息的一个控件——Toast(吐司)&#xff01;Toast是一种很方便的消息提示框,会在 屏幕中显示一个消息提示框,没任何按钮,也不会获得焦点一段时间过后自动消失&#xff01; 非常常用&#xff01;我们通过一个例子把Toast的使用讲…

【重识云原生】第六章容器基础6.4.9.6节——Service 与 Pod 的DNS

1 Service 与 Pod 的 DNS Kubernetes 为 Service 和 Pod 创建 DNS 记录。 你可以使用一致的 DNS 名称而非 IP 地址访问 Service。 Kubernetes DNS 除了在集群上调度 DNS Pod 和 Service&#xff0c; 还配置 kubelet 以告知各个容器使用 DNS Service 的 IP 来解析 DNS 名称。 集…

bcn_timout,ap_probe_send_start

ESP32 使用 beacon 超时机制检测 AP 是否活跃。如果 station 在 inactive 时间内未收到所连接 AP 的 beacon&#xff0c;将发生 beacon 超时。inactive 时间通过调用函数 esp_wifi_set_inactive_time() 设置。 beacon 超时发生后&#xff0c;station 将向 AP 发送 5 个 probe …

智芯传感MEMS压力传感器促进无人机跨入极其广阔的应用市场

2022年11月8日至13日&#xff0c;第十四届中国国际航空航天博览会在广东珠海国际航展中心举办。伴随着人工智能技术的进步&#xff0c;全球无人化装备的发展如火如荼。各式各样的无人机在无人化装备中可谓是一枝独秀&#xff0c;广受外界的高度关注。 据美国《Aviation Week&am…

【元宇宙欧米说】从GameFi的视角讨论Web2到Web3的利弊

什么将会是Web3生态赛道发展的未来&#xff1f;争议很大的GameFi如何建立高价值的商业生态&#xff1f; 11月23日下午三点&#xff0c;IDV合作经理Chillax将以“从GameFi视角讨论Web2到Web3的利弊”为题&#xff0c;与大家共同探讨Web3时代的到来如何影响GameFi的发展。 Bloc…

web自动化测试入门篇03——selenium使用教程

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

C++ Reference: Standard C++ Library reference: Containers: deque: deque: insert

C官网参考链接&#xff1a;https://cplusplus.com/reference/deque/deque/insert/ 公有成员函数 <deque> std::deque::insert C98 单个元素 (1) iterator insert (iterator position, const value_type& val); 填充 (2) void insert (iterator position, s…

华为OD机试真题(JavaScript)

更新中....... 创作不易&#xff0c;如果你觉得有帮助&#xff0c;就三连支持吧 本目录中所有算法题均使用JavaScript语言实现&#xff0c;并且基于node环境运行。 因此&#xff0c;我们需要在本地安装node环境&#xff0c;安装完node环境后&#xff0c;可以使用node命令直接运…

Golang学习之路6-goroutine并发

文章目录前言一、goroutine用法二、goroutine循环三、goroutine提前退出四、goroutine双向管道五、goroutine单向管道六、监听管道如下图&#xff0c;可以看到当我们监听到有写入数据时会得到对应的类型数据&#xff0c;当没有写入时 default 一直在负责监听&#xff01; ![在这…

前端播放m3u8格式视频

m3u8是苹果公司推出的视频播放标准&#xff0c;是m3u的一种&#xff0c;只是编码格式采用的是UTF-8。m3u8准确来说是一种索引文件&#xff0c;使用m3u8文件实际上是通过它来解析对应的放在服务器上的视频网络地址&#xff0c;从而实现在线播放。 m3u8格式的视频是将文件分成一小…

[附源码]计算机毕业设计JAVA个性化新闻推荐系统

[附源码]计算机毕业设计JAVA个性化新闻推荐系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM myba…

高级篇之ENC1V2新用法USB/RS232串口转Visca-Over-IP

高级篇之ENC1V2新用法USB/RS232串口转Visca-Over-IP术语背景现实需求大家好&#xff0c;最近ENC1-V2卖的很火&#xff0c;主要是因为发现了它的一个新用法&#xff0c;究竟是什么&#xff0c;马上揭晓。 术语 摄像机控制代码协议包括PTZ,VISCA,VISCA-OVER-IP,PELCO等, VISCA是…

java计算机毕业设计ssm求职与招聘网站的设计与实现

项目介绍 本前途招聘求职网站是针对目前仓库的实际需求,从实际工作出发,对过去的前途招聘求职网站存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确率高,节省了开支,提高了工作的效率。 本系统结合计算机系统的结构、概念…