Java實現 根據list列表元素的指定字段(屬性)進行排序

        之前寫過一篇博客 【Java實現 根據list列表元素的時間字段進行排序 】,其中是用的java自帶的集合工具類[java.util.Collections]對list列表元素的指定屬性進行排序,最近剛剛翻看源碼,發現 Collections 這個工具類的排序方法 sort(List<T> list, Comparator<? super T> c) 實際就是調用的List中的 sort(Comparator<? super E> c) 方法,現在記錄一下,後期排序可以直接用List中的sort方法排序,示例如下:

        本次示例中,應用的nutz框架中的Json工具類進行打印顯示,如果不熟悉的話,可以換用fastjson、Gson等各位小夥伴們熟悉的工具進行打印,或者可以直接重寫 toString() 方法,輸出顯示。我引用的nutz的maven依賴如下:


<dependency>
    <groupId>org.nutz</groupId>
    <artifactId>nutz</artifactId>
    <version>1.r.66</version>
</dependency>

用戶類:

public class Human {
    private String name;
    private String birthday;
    public Human() {
    }
    public Human(String name, String birthday) {
        this.name = name;
        this.birthday = birthday;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getBirthday() {
        return birthday;
    }
    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "Human{" +
                "name='" + name + '\'' +
                ", birthday='" + birthday + '\'' +
                '}';
    }
}

測試類:

import org.junit.Test;
import org.nutz.json.Json;
import org.nutz.json.JsonFormat;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

/**
 * @author 蕭仁武
 * @createtime 2020/6/17 9:36
 */
public class ListsortTest {

    public static List initList() {
        List<Human> list = new ArrayList<>();
        list.add(new Human("李明", "1987-05-23 12:34:07"));
        list.add(new Human("王明", "1977-05-23 05:04:07"));
        list.add(new Human("萬明", "1987-04-23 09:34:07"));
        list.add(new Human("錢明", "1997-05-23 10:24:08"));
        list.add(new Human("趙明", "1987-05-09 12:34:08"));
        return list;
    }

    /**
     * 根據list中元素 Human 對象的birthday屬性 升序排序
     */
    @Test
    public void listSort1() {
        List<Human> list = initList();
        System.out.println("排序前----:" + Json.toJson(list, JsonFormat.compact()));
        list.sort(new Comparator<Human>() {
            @Override
            public int compare(Human h1, Human h2) {
                return h1.getBirthday().compareTo(h2.getBirthday());
            }
        });
        System.out.println("排序後----:" + Json.toJson(list, JsonFormat.compact()));
    }

    /**
     * 根據list中元素 Human 對象的birthday屬性 降序排序
     */
    @Test
    public void listSort2() {
        List<Human> list = initList();
        System.out.println("排序前----:" + Json.toJson(list, JsonFormat.compact()));
        list.sort(new Comparator<Human>() {
            @Override
            public int compare(Human h1, Human h2) {
                // 和上一個示例相比,替換了 compareTo() 前後的對象
                return h2.getBirthday().compareTo(h1.getBirthday());
            }
        });
        System.out.println("排序後----:" + Json.toJson(list, JsonFormat.compact()));
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章