Java的Comparator自定義排序接口

Collections.sort(List<T> list,Comparator<? super T> c);方法

 

例如有如下集合:

List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();

集合內的值爲:

{name=zs, age=23},

{name=ls, age=25},

{name=ww, age=22},

{name=zl, age=37},

{name=qq, age=18}

 

 

我們要根據age的值給集合中的元素排序

使用Collections.sort(List<T> list,Comparator<? super T> c);方法

Collections.sort(list, new Comparator<Map<String, Object>>()
{
    @Override
    public int compare(Map<String, Object> o1, Map<String, Object> o2)
    {
        return 0;
    }
});

 

 

Comparator接口實現compare方法

經過踩坑,知道了compare方法兩個參數代表的意義

o1代表後一個元素,o2代表前一個元素

例如上述list集合,當方法進行第一次比較時,o1是{name=ls, age=25},o2是{name=zs, age=23}

 

compare方法的返回值是0、正整數、負整數

當返回0或正整數時,元素排序不變

當返回負整數時,元素調換位置

 

例如我們要將上述list集合按照升序排列,代碼如下:

Collections.sort(list, new Comparator<Map<String, Object>>()
{
    @Override
    public int compare(Map<String, Object> o1, Map<String, Object> o2)
    {
        // o1代表着後一個元素,o2代表前一個元素
        int ageF = (int)o1.get("age");
        int ageB = (int)o2.get("age");
        
        // 容易理解的代碼
        if (ageF >= ageB)
        {// 如果後一個元素的值大於或等於前一個元素的值,元素位置不變
            return 1;
        }
        else
        {// 如果後一個元素的值小於前一個元素的值,代碼位置調換
            return -1;
        }
        
        // 上述代碼可簡化爲:
        // return ageF - ageB;
    }
});

遍歷執行後的集合:

list.forEach(map->System.out.println(map.get("name").toString() + ":" + map.get("age")));得到結果:

 

發佈了74 篇原創文章 · 獲贊 45 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章