91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java去重排序之Comparable與Comparator怎么使用

發布時間:2023-04-07 10:28:53 來源:億速云 閱讀:126 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Java去重排序之Comparable與Comparator怎么使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java去重排序之Comparable與Comparator怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

一、排序與去重

日常工作中,總會有一些場景需要對結果集進行一些過濾。比如,與第三方交互后獲取的結果集,需要再次排序去重,此時就會根據某個字段來去重,又或者某個字段來排序。

在Java中,去重的話,我們很容易就想到了Set的特性(無序無重),并且TreeSet(有序無重)還可以指定去重的規則(去重后一般是升序的結果集)。

排序的話,我們很容易想到各種排序算法,但Java中已經提供了排序的功能,如集合中sort()方法,并且還可以指定排序的字段和升降序。

在此多說一句,Set的特性(無序無重):

  • 無序:無序性不是隨機性,因為放入set中的元素,會根據元素的hash值來決定所放入的位置

  • 無重:添加元素時 ,會按照元素的equals()進行判斷,false認為兩個元素不等時,才會添加

二、Comparable與Comparator的使用

public class CompareTest {

    public static void main(String[] args) {
        // 例如:從第三方返回的結果集
        // 根據id去重,根據createTime降序排列
        String result = "["
                + "{ \"id\": 1, \"createTime\": \"2022-12-21 13:23:59\"}"
                + "{ \"id\": 2, \"createTime\": \"2022-11-11 12:43:01\"}"
                + "{ \"id\": 1, \"createTime\": \"2022-12-21 11:20:50\"}"
                + "{ \"id\": 3, \"createTime\": \"2023-01-01 14:30:00\"}"
                + "]";
        JSONArray examList = JSONArray.parseArray(result);
        System.out.println("初始數據集:" + examList);

        // 去重,利用set特性
        Comparator<JSONObject> comparator = (a, b) -> Integer.compare(a.getIntValue("id"), b.getIntValue("id"));
        Set<JSONObject> set = new TreeSet<>(comparator);
        examList.forEach(jo -> set.add((JSONObject) jo));
        // 此時的結果是,根據id去重,并且是升序的結果(自然排序)
        System.out.println("去重結果:" + set);

        // 此處為了,方便演示Comparable接口的作用,故把JSON映射成實體類,進行實現接口排序,其實sorted也可以使用Comparator排序
        List<ExamInfo> collect = set.stream()
                .map(jo -> JSONObject.toJavaObject(jo, ExamInfo.class))
                .sorted()
                .collect(Collectors.toList());
        System.out.println("指定排序結果:" + collect);
    }

}
public class ExamInfo implements Comparable<ExamInfo> {

    private int id;
    private String createTime;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getCreateTime() {
        return createTime;
    }

    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }

    @Override
    public String toString() {
        return "ExamInfo{" +
                "id=" + id +
                ", createTime='" + createTime + '\'' +
                '}';
    }

    @Override
    public int compareTo(ExamInfo o) {
        // 降序
        return o.getCreateTime().compareTo(this.createTime);
    }
}

Java去重排序之Comparable與Comparator怎么使用

關于排序升降序問題,Comparable與Comparator中的比較方法的返回值,大于0就交換。

所以參數順序為a,b時:

  • a>b,即a-b>0,因為順序是 a,b,交換后,b在前,a在后,排序順序升序,即為自然排序;

 // 升序
 Comparator<JSONObject> comparator = (a, b) -> Integer.compare(a.getIntValue("id"), b.getIntValue("id"));
  • b>a,即b-a>0,因為順序是 a,b,交換后,b在前,a在后,排序順序降序

 	@Override
 	public int compareTo(ExamInfo o) {
        // 降序
        return o.getCreateTime().compareTo(this.createTime);
    }

三、區別


ComparableComparator
所屬包java.langjava.util
是否為函數式接口
比較的方法int compareTo(T o)int compare(T o1, T o2)
使用場景比較的對象,自己可修改比較的對象,自己不能修改,或者對象實現了Comparable接口,但比較規則不適用

讀到這里,這篇“Java去重排序之Comparable與Comparator怎么使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邓州市| 禄劝| 岳阳县| 望奎县| 孝昌县| 临沂市| 缙云县| 固镇县| 玉树县| 青岛市| 临泽县| 龙江县| 贵州省| 苍南县| 曲靖市| 星子县| 普兰县| 河北省| 博爱县| 平乐县| 宁陕县| 高雄县| 丰镇市| 句容市| 公主岭市| 嘉兴市| 突泉县| 锡林郭勒盟| 南陵县| 沛县| 社会| 毕节市| 乐安县| 保定市| 石泉县| 屏南县| 临洮县| 萝北县| 兴文县| 肥乡县| 凤台县|