系列文章目錄
SpringBoot+Vue3實(shí)現(xiàn)登錄驗(yàn)證碼功能
Java實(shí)現(xiàn)發(fā)送郵件(定時(shí)自動(dòng)發(fā)送郵件)
換個(gè)角度使用Redis去解決跨域存取Session問題
Redis緩存穿透、擊穿、雪崩問題及解決方法
Spring Cache的使用–快速上手篇
更多該系列文章請查看我的主頁哦
前言
??根據(jù)一些真實(shí)需求遇到的問題,需進(jìn)行排序后進(jìn)行數(shù)據(jù)的封裝展示。例如,現(xiàn)在有一個(gè)類型為List<HashMap<String,String>>的無序數(shù)據(jù),list里的各個(gè)map的key值是一樣的,但是value值是使用a,b,f,d等字母作為真實(shí)條件存儲(chǔ)的值。展示時(shí)需通過這些條件中a,b,c,d,e,f的順序去展示這些數(shù)據(jù)。在通過半個(gè)多小時(shí)的研究后,自己寫了一個(gè)自定義的排序規(guī)則。這個(gè)規(guī)則適用于List套map形式的數(shù)據(jù)進(jìn)行排序。在寫完根據(jù)value排序后,順便把根據(jù)每個(gè)key排序的情況進(jìn)行了擴(kuò)充。
一、根據(jù)Key值排序
1.1.數(shù)據(jù)準(zhǔn)備
如下代碼所示,準(zhǔn)備自定義排序規(guī)則的strlist和需要進(jìn)行排序的list2 :
??這里的strlist是排序規(guī)則,可以根據(jù)你想要的順序進(jìn)行排序展示(添加的順序即為展示的順序)。像這里我是key為a的排前,b,c,d,e,f的順序排序各個(gè)map。這里的list2是在列表里準(zhǔn)備了各個(gè)map的key和value值。當(dāng)然這是以key值排序,所以key是屬于自定義排序規(guī)則內(nèi)的值。
//自定義排序規(guī)則 添加的順序(值)就是排序的順序
ArrayList<String> strlist=new ArrayList<>();
strlist.add("a");
strlist.add("b");
strlist.add("c");
strlist.add("d");
strlist.add("e");
strlist.add("f");
//根據(jù)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.實(shí)現(xiàn)的方法
??實(shí)現(xiàn)需將上述準(zhǔn)備的list作為入?yún)魅朐摲椒ㄟM(jìn)行操作:首先需定義一個(gè)新的list1,用來封裝排序好的數(shù)據(jù)。然后是進(jìn)行循環(huán)(外層為自定義規(guī)則的值,內(nèi)層為排序前的數(shù)據(jù)),去循環(huán)的過程中根據(jù)自定義排序的strlist進(jìn)行依次判斷l(xiāng)ist(排序前的數(shù)據(jù))是否存在自定義的值,存在即放到新的list1中,然后將排序好的list1返回。提示:這里的最內(nèi)層循環(huán):我的每個(gè)map都存放的一個(gè)key,value,所以直接取值判斷。如放多個(gè)值,需在最內(nèi)層中寫if判斷根據(jù)哪個(gè)值進(jìn)行對(duì)該map排序。這里在擴(kuò)展中會(huì)說。。。
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) {
//根據(jù)map里的哪個(gè)值排序 加if判斷即可
keyc=key;
}
if(strlist.get(i).equals(keyc)){
list1.add(map1);
}
}
}
return list1.toString();
}
1.3.效果展示
打印代碼如下:
System.out.println("根據(jù)map的key排序前="+list2);
String sortKey = sortKey(list2,strlist);
System.out.println("根據(jù)map的key排序后="+sortKey);
效果圖展示如下圖所示:可看到根據(jù)key值排序前后的不同。
二、根據(jù)Value值排序
2.1.數(shù)據(jù)準(zhǔn)備
如下代碼所示,準(zhǔn)備自定義排序規(guī)則的strlist和需要進(jìn)行排序的list :
??這里的strlist是排序規(guī)則,可以根據(jù)你想要的順序進(jìn)行排序展示(添加的順序即為展示的順序)。像這里我是value為a的排前,b,c,d,e,f的順序排序各個(gè)map。這里的list是在列表里準(zhǔn)備了各個(gè)map的key和value值。當(dāng)然這是以Value值排序,所以Value是屬于自定義排序規(guī)則內(nèi)的值。
//自定義排序規(guī)則 添加的順序(值)就是排序的順序
ArrayList<String> strlist=new ArrayList<>();
strlist.add("a");
strlist.add("b");
strlist.add("c");
strlist.add("d");
strlist.add("e");
strlist.add("f");
//模擬數(shù)據(jù)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.實(shí)現(xiàn)的方法
??實(shí)現(xiàn)需將上述準(zhǔn)備的list作為入?yún)魅朐摲椒ㄟM(jìn)行操作:首先需定義一個(gè)新的list1,用來封裝排序好的數(shù)據(jù)。然后是進(jìn)行循環(huán)(外層為自定義規(guī)則的值,內(nèi)層為排序前的數(shù)據(jù)),去循環(huán)的過程中根據(jù)自定義排序的strlist進(jìn)行依次判斷l(xiāng)ist(排序前的數(shù)據(jù))是否存在自定義的值,存在即放到新的list1中,然后將排序好的list1返回。 如果kay排序看懂了,相信value也能夠輕松的看懂下述代碼。提示:這里的最內(nèi)層循環(huán):我的每個(gè)map都存放的一個(gè)key,value,所以直接取值判斷。如放多個(gè)值,需在最內(nèi)層中寫if判斷根據(jù)哪個(gè)值進(jìn)行對(duì)該map排序。這里在擴(kuò)展中會(huì)說。。。
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("根據(jù)map的value排序前="+list);
//根據(jù)map值排序
String sortValue = sortValue(list,strlist);
System.out.println("根據(jù)map的value排序后="+sortValue);
效果圖展示如下圖所示:可看到根據(jù)key值排序前后的不同。
三、擴(kuò)展思路及方法的運(yùn)用
??對(duì)于方法中上述提到的如果map中有多個(gè)值的情況,需先定義哪個(gè)值作為排序的值。
例如sortKey時(shí),如果根據(jù)的是map中key為“score”進(jìn)行排序,那么這里需這樣寫,如下述代碼所示:
//取值
Set<String> keys = map1.keySet();
for (String key : keys) {
//根據(jù)map里的哪個(gè)值排序 加if判斷即可
if("score".equals(key)){
keyc=key;
}
}
例如sortValue時(shí),如果根據(jù)的是map中key為“type”的value進(jìn)行排序,那么這里需這樣寫,如下述代碼所示:
文章來源:http://www.zghlxwxcb.cn/news/detail-731726.html
總結(jié)
??對(duì)于value的排序是我在工作中根據(jù)真實(shí)需求進(jìn)行的編寫,在編寫的過程中也有很多想法。但在有限的時(shí)間內(nèi)還是選擇了這種比較耗時(shí)的算法。key的排序是我臨時(shí)想到編寫的,也是給大家一個(gè)思路。如有在value排序中比我這種方法好的想法或者代碼歡迎在評(píng)論區(qū)討論,我們一起交流學(xué)習(xí)~文章來源地址http://www.zghlxwxcb.cn/news/detail-731726.html
到了這里,關(guān)于List<HashMap<String,String>>實(shí)現(xiàn)自定義字符串排序(key排序、Value排序)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!