最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Map按單個或多個Value排序當Value相同時按Key排序

 更新時間:2023年02月03日 15:13:26   作者:向著百萬年薪努力的小趙  
Map可以先按照value進行排序,然后按照key進行排序。 或者先按照key進行排序,然后按照value進行排序,這樣操作都行,這篇文章主要介紹了Map按單個或多個Value排序,當Value相同時按Key排序,需要的朋友可以參考下

Map可以先按照value進行排序,然后按照key進行排序。 或者先按照key進行排序,然后按照value進行排序,這都是可以的。

并且,大家可以制定自己的排序規(guī)則。
按單個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 {
 
        // 創(chuàng)建一個字符串為Key,數(shù)字為值的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的數(shù)值從大到小進行排序,當value數(shù)值大小相同時,再按照key的長度從長到短進行排序,這個操作與Stream流式操作相結合。

    /**
     * Map按照整數(shù)型的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));
    }

補充:對Map中的Value進行降序排序,當Value相同時,按照Key降序排序

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 類型的參數(shù)。
                //返回值:如果指定的數(shù)與參數(shù)相等返回0。
                // 如果指定的數(shù)小于參數(shù)返回 -1。
                //如果指定的數(shù)大于參數(shù)返回 1
                if(result!=0){
                    return result;//即兩個Value不相同,就按照Value倒序輸出
                }else{
                    return o2.getKey().compareTo(o1.getKey());}
                    //若兩個Value相同,就按照Key倒序輸出
            }
        });
        //這里arrayList里的順序已經(jīng)按照自己的排序進行了調(diào)整
        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中存取的內(nèi)容順序并沒有進行任何改變,改變的是arrayList里的內(nèi)容的順序
        }
    }
}

參考文獻:

https://blog.csdn.net/LvJinYang/article/details/102875095

https://blog.csdn.net/u014388729/article/details/80156645

到此這篇關于Map按單個或多個Value排序,當Value相同時按Key排序的文章就介紹到這了,更多相關Map按單個或多個Value排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于Java Socket實現(xiàn)一個簡易在線聊天功能(一)

    基于Java Socket實現(xiàn)一個簡易在線聊天功能(一)

    這篇文章主要給大家介紹基于Java Socket實現(xiàn)一個簡易在線聊天功能(一),分為客戶端和服務端兩段代碼,非常具有參考價值,感興趣的朋友一起學習吧
    2016-05-05
  • JDK1.8中ConcurrentHashMap中computeIfAbsent死循環(huán)bug問題

    JDK1.8中ConcurrentHashMap中computeIfAbsent死循環(huán)bug問題

    這篇文章主要介紹了JDK1.8中ConcurrentHashMap中computeIfAbsent死循環(huán)bug,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • java進制轉(zhuǎn)換工具類實現(xiàn)減少參數(shù)長度

    java進制轉(zhuǎn)換工具類實現(xiàn)減少參數(shù)長度

    這篇文章主要為大家介紹了java進制轉(zhuǎn)換工具類實現(xiàn)減少參數(shù)長度示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Java 如何判斷Integer類型的值是否相等

    Java 如何判斷Integer類型的值是否相等

    這篇文章主要介紹了Java 如何判斷Integer類型的值是否相等操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java?Socket實現(xiàn)聊天室功能

    Java?Socket實現(xiàn)聊天室功能

    這篇文章主要為大家詳細介紹了Java?Socket實現(xiàn)聊天室功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Springboot詳解如何整合使用Thymeleaf

    Springboot詳解如何整合使用Thymeleaf

    這篇文章主要分享了Spring Boot整合使用Thymeleaf,Thymeleaf是新一代的Java模板引擎,類似于Velocity、FreeMarker等傳統(tǒng)引擎,關于其更多相關內(nèi)容,需要的小伙伴可以參考一下
    2022-06-06
  • IntelliJ-Idea導出可執(zhí)行Jar流程解析

    IntelliJ-Idea導出可執(zhí)行Jar流程解析

    這篇文章主要介紹了IntelliJ-Idea導出可執(zhí)行Jar流程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • 使用@Valid 校驗嵌套對象

    使用@Valid 校驗嵌套對象

    這篇文章主要介紹了使用@Valid 校驗嵌套對象方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Maven版本沖突的三種解決方法

    Maven版本沖突的三種解決方法

    在Maven項目中,依賴傳遞可能導致Jar包版本沖突,常見的解決策略包括依賴排除、版本鎖定和使用maven-shade-plugin插件,本文就來介紹一下這三種解決方法,感興趣的可以了解一下
    2024-10-10
  • JVM自定義類加載器在代碼擴展性實踐分享

    JVM自定義類加載器在代碼擴展性實踐分享

    這篇文章主要介紹了JVM自定義類加載器在代碼擴展性實踐分享,一個類型從被加載到虛擬機內(nèi)存中開始,到卸載出內(nèi)存為止,它的整個生命周期將會經(jīng)歷加載、驗證、準備、解析、初始化 、使用和卸載七個階段,其中驗證、準備、解析三個部分統(tǒng)稱為連接
    2022-06-06

最新評論

安远县| 定州市| 柳河县| 依安县| 阿巴嘎旗| 广安市| 老河口市| 吉安县| 叶城县| 广昌县| 莱州市| 焉耆| 汕头市| 贡嘎县| 防城港市| 蛟河市| 清苑县| 大名县| 筠连县| 商水县| 巴楚县| 七台河市| 疏附县| 湖北省| 盘山县| 安新县| 建始县| 宁城县| 鹤壁市| 农安县| 咸宁市| 南平市| 会泽县| 南郑县| 舒城县| 大港区| 蓬安县| 东阿县| 南昌县| 农安县| 和平县|