系列文章目录
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值排序前后的不同。
二、根据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值排序前后的不同。
三、扩展思路及方法的运用
对于方法中上述提到的如果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进行排序,那么这里需这样写,如下述代码所示:
文章来源:https://www.toymoban.com/news/detail-731726.html
总结
对于value的排序是我在工作中根据真实需求进行的编写,在编写的过程中也有很多想法。但在有限的时间内还是选择了这种比较耗时的算法。key的排序是我临时想到编写的,也是给大家一个思路。如有在value排序中比我这种方法好的想法或者代码欢迎在评论区讨论,我们一起交流学习~文章来源地址https://www.toymoban.com/news/detail-731726.html
到了这里,关于List<HashMap<String,String>>实现自定义字符串排序(key排序、Value排序)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!