List<HashMap<String,String>>实现自定义字符串排序(key排序、Value排序)

这篇具有很好参考价值的文章主要介绍了List<HashMap<String,String>>实现自定义字符串排序(key排序、Value排序)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

SpringBoot+Vue3实现登录验证码功能
Java实现发送邮件(定时自动发送邮件)
换个角度使用Redis去解决跨域存取Session问题
Redis缓存穿透、击穿、雪崩问题及解决方法
Spring Cache的使用–快速上手篇

更多该系列文章请查看我的主页哦



前言

  根据一些真实需求遇到的问题,需进行排序后进行数据的封装展示。例如,现在有一个类型为List<HashMap<String,String>>的无序数据,list里的各个map的key值是一样的,但是value值是使用a,b,f,d等字母作为真实条件存储的值。展示时需通过这些条件中a,b,c,d,e,f的顺序去展示这些数据。在通过半个多小时的研究后,自己写了一个自定义的排序规则。这个规则适用于List套map形式的数据进行排序。在写完根据value排序后,顺便把根据每个key排序的情况进行了扩充。


一、根据Key值排序

1.1.数据准备

如下代码所示,准备自定义排序规则的strlist和需要进行排序的list2

  这里的strlist是排序规则,可以根据你想要的顺序进行排序展示(添加的顺序即为展示的顺序)。像这里我是key为a的排前,b,c,d,e,f的顺序排序各个map。这里的list2是在列表里准备了各个map的key和value值。当然这是以key值排序,所以key是属于自定义排序规则内的值。

      //自定义排序规则 添加的顺序(值)就是排序的顺序
      ArrayList<String> strlist=new ArrayList<>();
      strlist.add("a");
      strlist.add("b");
      strlist.add("c");
      strlist.add("d");
      strlist.add("e");
      strlist.add("f");
     //根据key排序
	 ArrayList<HashMap<String, String>> list2 = new ArrayList<>();
	 HashMap<String, String> hashMap5 = new HashMap<String, String>();
	 hashMap5.put("a","这是a");
	 list2.add(hashMap5);
	 HashMap<String, String> hashMap6 = new HashMap<String, String>();
	 hashMap6.put("c","这是c");
	 list2.add(hashMap6);
	 HashMap<String, String> hashMap7 = new HashMap<String, String>();
	 hashMap7.put("f","这是f");
	 list2.add(hashMap7);
	 HashMap<String, String> hashMap8 = new HashMap<String, String>();
	 hashMap8.put("b","这是b");
	 list2.add(hashMap8);
	 HashMap<String, String> hashMap9 = new HashMap<String, String>();
	 hashMap9.put("d","这是d");
	 list2.add(hashMap9);

1.2.实现的方法

  实现需将上述准备的list作为入参传入该方法进行操作:首先需定义一个新的list1,用来封装排序好的数据。然后是进行循环(外层为自定义规则的值,内层为排序前的数据),去循环的过程中根据自定义排序的strlist进行依次判断list(排序前的数据)是否存在自定义的值,存在即放到新的list1中,然后将排序好的list1返回。
提示:这里的最内层循环:我的每个map都存放的一个key,value,所以直接取值判断。如放多个值,需在最内层中写if判断根据哪个值进行对该map排序。这里在扩展中会说。。。

public static String sortKey(List<HashMap<String,String>> list,ArrayList<String> strlist) {
        ArrayList<HashMap<String, String>> list1 = new ArrayList<>();
        String keyc="";
        for (int i = 0; i < strlist.size(); i++) {
            for (int j = 0; j < list.size(); j++) {
                HashMap<String, String> map1 = list.get(j);
                //取值
                Set<String> keys = map1.keySet();
                for (String key : keys) {
                    //根据map里的哪个值排序 加if判断即可
                    keyc=key;
                }
                if(strlist.get(i).equals(keyc)){
                    list1.add(map1);
                }
            }
        }
        return list1.toString();
    }

1.3.效果展示

打印代码如下:

	System.out.println("根据map的key排序前="+list2);
    String sortKey = sortKey(list2,strlist);
    System.out.println("根据map的key排序后="+sortKey);

效果图展示如下图所示:可看到根据key值排序前后的不同。
List<HashMap<String,String>>实现自定义字符串排序(key排序、Value排序),java知识点,后端知识点,list,数据结构,java,算法,junit

二、根据Value值排序

2.1.数据准备

如下代码所示,准备自定义排序规则的strlist和需要进行排序的list

  这里的strlist是排序规则,可以根据你想要的顺序进行排序展示(添加的顺序即为展示的顺序)。像这里我是value为a的排前,b,c,d,e,f的顺序排序各个map。这里的list是在列表里准备了各个map的key和value值。当然这是以Value值排序,所以Value是属于自定义排序规则内的值。

        //自定义排序规则 添加的顺序(值)就是排序的顺序
        ArrayList<String> strlist=new ArrayList<>();
        strlist.add("a");
        strlist.add("b");
        strlist.add("c");
        strlist.add("d");
        strlist.add("e");
        strlist.add("f");

        //模拟数据list<HashMap<String,String>>
        ArrayList<HashMap<String, String>> list = new ArrayList<>();
        HashMap<String, String> hashMap = new HashMap<String, String>();
        hashMap.put("type","a");
        list.add(hashMap);
        HashMap<String, String> hashMap1 = new HashMap<String, String>();
        hashMap1.put("type","c");
        list.add(hashMap1);
        HashMap<String, String> hashMap3 = new HashMap<String, String>();
        hashMap3.put("type","f");
        list.add(hashMap3);
        HashMap<String, String> hashMap2 = new HashMap<String, String>();
        hashMap2.put("type","b");
        list.add(hashMap2);
        HashMap<String, String> hashMap4 = new HashMap<String, String>();
        hashMap4.put("type","d");
        list.add(hashMap4);

2.2.实现的方法

  实现需将上述准备的list作为入参传入该方法进行操作:首先需定义一个新的list1,用来封装排序好的数据。然后是进行循环(外层为自定义规则的值,内层为排序前的数据),去循环的过程中根据自定义排序的strlist进行依次判断list(排序前的数据)是否存在自定义的值,存在即放到新的list1中,然后将排序好的list1返回。 如果kay排序看懂了,相信value也能够轻松的看懂下述代码。
提示:这里的最内层循环:我的每个map都存放的一个key,value,所以直接取值判断。如放多个值,需在最内层中写if判断根据哪个值进行对该map排序。这里在扩展中会说。。。

public static String sortValue(List<HashMap<String,String>> list,ArrayList<String> strlist) {
        ArrayList<HashMap<String, String>> list1 = new ArrayList<>();
        for (int i = 0; i < strlist.size(); i++) {
            for (int j = 0; j < list.size(); j++) {
                HashMap<String, String> map1 = list.get(j);
                String type = map1.get("type");
                if(strlist.get(i).equals(type)){
                    list1.add(map1);
                }
            }
        }
        return list1.toString();
    }

2.3.效果展示

打印代码如下:

		System.out.println("根据map的value排序前="+list);
        //根据map值排序
        String sortValue = sortValue(list,strlist);
        System.out.println("根据map的value排序后="+sortValue);

效果图展示如下图所示:可看到根据key值排序前后的不同。
List<HashMap<String,String>>实现自定义字符串排序(key排序、Value排序),java知识点,后端知识点,list,数据结构,java,算法,junit

三、扩展思路及方法的运用

  对于方法中上述提到的如果map中有多个值的情况,需先定义哪个值作为排序的值

例如sortKey时,如果根据的是map中key为“score”进行排序,那么这里需这样写,如下述代码所示:

		//取值
       Set<String> keys = map1.keySet();
       for (String key : keys) {
           //根据map里的哪个值排序 加if判断即可
           if("score".equals(key)){
               keyc=key;
           }
       }

例如sortValue时,如果根据的是map中key为“type”的value进行排序,那么这里需这样写,如下述代码所示:

List<HashMap<String,String>>实现自定义字符串排序(key排序、Value排序),java知识点,后端知识点,list,数据结构,java,算法,junit


总结

  对于value的排序是我在工作中根据真实需求进行的编写,在编写的过程中也有很多想法。但在有限的时间内还是选择了这种比较耗时的算法。key的排序是我临时想到编写的,也是给大家一个思路。如有在value排序中比我这种方法好的想法或者代码欢迎在评论区讨论,我们一起交流学习~文章来源地址https://www.toymoban.com/news/detail-731726.html

到了这里,关于List<HashMap<String,String>>实现自定义字符串排序(key排序、Value排序)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 字符串数组定义_「string数组」string 数组怎么定义

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 点击跳转浏览。 String arr[] = new String[10]; //创建一个长度为10的String 类型数组。 String arr[] = {“张三”,“李四”}; 这个是最常用的 String[] arr = new String[10];

    2024年02月15日
    浏览(49)
  • List<Long> 类型数据转为string字符串类型 jdk1.8新特性

    话不多说,直接上代码 这里,我们首先将 ListLong 转换为 StreamLong ,然后使用 map() 方法将每个 Long 类型的元素转换为字符串类型,再使用 Collectors.joining() 方法将所有字符串连接起来并用逗号和空格分隔。 需要注意的是, Collectors.joining() 方法返回的是一个字符串类型的结果,

    2024年02月13日
    浏览(53)
  • C#使用自定义的比较器对版本号(编码)字符串进行排序

    给定一些数据,如下所示: “1.10.1.1.1.2”, “1.1”, “2.2”, “1.1.1.1”, “1.1.3.1”, “1.1.1”, “2.10.1.1.1”, “1.1.2.1”, “1.2.1.1”, “2.5.1.1”, “1.10.1.1”, “1.10.2.1”, “1.11.3.1”, “1.11.12.1”, “1.11.11.1”, “1.11.3.1”, “1”, “1.1.1.1.1”, “1.1.1.1.1.1” 实现效果: 按照每个节点层

    2024年02月11日
    浏览(40)
  • Java-json相关转换,JSONObject与实体类/map互转、List/List<map>和JSONArray互转、获取JSONObject中的key value、字符串String转换等

    博客背景是Java开发。json相关的转换、取值等在日常开发中经常使用,但有时候还是会忘记or遇到些奇奇怪怪的问题。以此记录,提醒自己~不定期更新~ 实体类和JSONObject互转 Map和JSONObject互转 String转JSONObject 实体类转JSON字符串时不过滤NULL空值 获取JSONObject中的key value List和

    2024年02月12日
    浏览(76)
  • Java实现字符串排序的几种方式

    创建实体类(此处引入了lombok) 一、使用List集合中自带的sort方法(字符串的位数保持一致,不一致的情况可以在左边补0,也可以使用String.format()方法补全) 1、在对象排序中使用 2、在字符串排序中使用 二、使用Stream流(字符串的位数保持一致,不一致的情况可以在左边补

    2024年02月11日
    浏览(51)
  • String字符串

    直接创建 代码简单,节约内存 使用new创建 有new就会开辟一个新的小空间,地址值不同不会复用浪费空间 案例:用户登录 遍历字符串 统计字符个数 拼接字符串 字符串反转 金额转换 手机号屏蔽 敏感词替换 使用场景:1.字符串拼接。2、字符串反转 常用方法练习 对称字符串

    2024年02月16日
    浏览(51)
  • String(字符串)

    java.lang.String类代表字符串,Java程序中的所有字符串文字(例如“abc”)都为此类的对象。 字符串的内容是不会发生改变的,它的对象在创建后不能被更改。 String是Java定义好的一个类。定义在java.lang包中,所以使用的时候不需要导包。 Java程序中的所有字符串文字都被实为此

    2024年02月13日
    浏览(45)
  • 【string题解 C++】字符串相乘 | 翻转字符串III:翻转单词

    目录 字符串相乘 题面 错误记录 Way1 拆分成“先乘后加” 思路 实现 时空复杂度分析 反思 Way2 用数组 思路 实现 时空复杂度分析 翻转字符串III:翻转字符串中的单词 题面 错误记录 思路1 遍历找单词 实现 思路2 暴力解法 实现 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平

    2024年02月07日
    浏览(59)
  • C# 字符串(String)

    C#基础学习入门系列- C# 字符串(String) C#字符串(String)是一种不可变的序列字符。任何对字符串的操作都会返回一个新的字符串。字符串在C#中是一个引用类型,使用System.String类表示。 字符串可以通过使用双引号或者@符号来创建。双引号用于创建普通字符串 ,例如: @符

    2024年01月21日
    浏览(55)
  • redis—String字符串

    目录 前言 1.字符串数据类型 2.常见命令 3.典型应用场景 字符串类型是Redis最基础的数据类型,关于字符串需要特别注意: 1)首先Redis中所有的键的类型都是字符串类型,而且其他几种数据结构也都是在字符串类似基础.上构建的,例如列表和集合的 元素类型是字符串类型,所以

    2024年02月02日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包