<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Map可以先按照value進行排序,然後按照key進行排序。 或者先按照key進行排序,然後按照value進行排序,這都是可以的。
並且,大家可以制定自己的排序規則。
按單個value排序:
import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import static java.util.Map.Entry.comparingByValue; import static java.util.stream.Collectors.toMap; public class SortTest { public static void main(String[] args) throws Exception { // 建立一個字串為Key,數位為值的map Map<String, Integer> budget = new HashMap<>(); budget.put("clothes", 120); budget.put("grocery", 150); budget.put("transportation", 100); budget.put("utility", 130); budget.put("rent", 1150); budget.put("miscellneous", 90); System.out.println("排序前: " + budget); // 按值排序 升序 Map<String, Integer> sorted = budget .entrySet() .stream() .sorted(comparingByValue()) .collect( toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new)); System.out.println("升序按值排序後的map: " + sorted); // 按值排序降序 sorted = budget .entrySet() .stream() .sorted(Collections.reverseOrder(comparingByValue())) .collect( toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new)); System.out.println("降序按值排序後的map: " + sorted); } }
按多個value排序:
data = data.stream().sorted(Comparator.comparing(o -> { StringBuffer key = new StringBuffer(); fieldList.stream().forEach((a)-> { key.append(o.get(a)+""); }); return key.toString(); } )).collect(Collectors.toList());
下面的程式碼中,首先按照value的數值從大到小進行排序,當value數值大小相同時,再按照key的長度從長到短進行排序,這個操作與Stream流式操作相結合。
/** * Map按照整數型的value進行降序排序,當value相同時,按照key的長度進行排序 * * @param map * @return */ public static LinkedHashMap<String, Integer> sortMap(Map<String, Integer> map) { return map.entrySet().stream().sorted(((item1, item2) -> { int compare = item2.getValue().compareTo(item1.getValue()); if (compare == 0) { if (item1.getKey().length() < item2.getKey().length()) { compare = 1; } else if (item1.getKey().length() > item2.getKey().length()) { compare = -1; } } return compare; })).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new)); }
package com.ethjava; import java.util.*; public class mappaixu1 { public static void main(String[] args){ Map<Integer,Integer> hashMap=new HashMap<Integer, Integer>(); hashMap.put(1,10); hashMap.put(5,7); hashMap.put(2,9); hashMap.put(3,7); hashMap.put(3,6);//key是不可重複的,當這裡再次輸入Key=3時的,將會覆蓋掉前面的(3,7) hashMap.put(4,7); //遍歷 for(Map.Entry<Integer,Integer> e:hashMap.entrySet()){ System.out.println("Key: "+e.getKey()+"對應的Value: "+e.getValue()); } //Key: 1對應的Value: 10 //Key: 2對應的Value: 9 //Key: 3對應的Value: 6 //Key: 4對應的Value: 7 //Key: 5對應的Value: 7 //這裡為什麼自動按照key升序排序輸出???為什麼 // 某夢說,這裡是因為湊巧正序輸出,hashMap輸出相對於輸入是無序的。 //下面按照Value進行倒序排列 ArrayList<Map.Entry<Integer,Integer>> arrayList=new ArrayList<Map.Entry<Integer, Integer>>(hashMap.entrySet()); Collections.sort(arrayList,new Comparator<Map.Entry<Integer,Integer>>(){ @Override public int compare(Map.Entry<Integer,Integer> o1,Map.Entry<Integer,Integer> o2 ){ //按照Value進行倒序,若Value相同,按照Key正序排序 //方法1:return o2.getValue() - o1.getValue(); //方法2:return o2.getValue().compareTo(o1.getValue());//對於Integer,String都是可以應用的 //按照Value進行倒序,若Value相同,按照Key倒序排序 int result = o2.getValue().compareTo(o1.getValue()); //方法學習:public int compareTo( NumberSubClass referenceName ) //referenceName -- 可以是一個 Byte, Double, Integer, Float, Long 或 Short 型別的引數。 //返回值:如果指定的數與引數相等返回0。 // 如果指定的數小於引數返回 -1。 //如果指定的數大於引數返回 1 if(result!=0){ return result;//即兩個Value不相同,就按照Value倒序輸出 }else{ return o2.getKey().compareTo(o1.getKey());} //若兩個Value相同,就按照Key倒序輸出 } }); //這裡arrayList裡的順序已經按照自己的排序進行了調整 for(int i=0;i<arrayList.size();i++){ System.out.println(arrayList.get(i)); //方法一和方法二輸出: //1=10 //2=9 //4=7 //5=7 //3=6 //當按照Value倒序排序,但是當Value相同時,按照Key順序正序排序 //方法二 //1=10 //2=9 //5=7 //4=7 //3=6 //當按照Value倒序輸出,但是當Value相同時,按照Key倒序輸出 } for(Map.Entry<Integer,Integer> e:hashMap.entrySet()){ System.out.println(e); //1=10 //2=9 //3=6 //4=7 //5=7 //這裡表明hashMap中存取的內容順序並沒有進行任何改變,改變的是arrayList裡的內容的順序 } } }
參考文獻:
https://blog.csdn.net/LvJinYang/article/details/102875095
https://blog.csdn.net/u014388729/article/details/80156645
到此這篇關於Map按單個或多個Value排序,當Value相同時按Key排序的文章就介紹到這了,更多相關Map按單個或多個Value排序內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45