成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

Java對(duì)象集合萬(wàn)能排序封裝

zlyBear / 3208人閱讀

摘要:前言直接進(jìn)入正題,閑的沒(méi)事把對(duì)對(duì)象集合排序進(jìn)行了封裝,寫(xiě)起來(lái)優(yōu)雅一點(diǎn),不用每次用的時(shí)候自己再一個(gè)比較器對(duì)象了。

前言

直接進(jìn)入正題,閑的沒(méi)事把Java對(duì)對(duì)象集合排序進(jìn)行了封裝,寫(xiě)起來(lái)優(yōu)雅一點(diǎn),不用每次用的時(shí)候自己再new一個(gè)比較器對(duì)象了。

ListOrderUtil

沒(méi)多少東西,就是下邊這點(diǎn)代碼!

import java.lang.reflect.Field;
import java.util.*;

public class ListOrderUtil {
    private List mArrayList;//數(shù)據(jù)集合
    private LinkedHashMap mOrderList = new LinkedHashMap<>();//所有的排序字段
    private Class mClass;//當(dāng)天T的Class
    public static int ORDER_ASC = 1;//正序排列
    public static int ORDER_DESC = 2;//倒序排列

    public ListOrderUtil(List arrayList, Class tClass) {
        this.mArrayList = arrayList;
        this.mClass = tClass;
    }

    /**
     * 設(shè)置排序字段(按照設(shè)置的先后順序?qū)ζ溥M(jìn)行排序)
     *
     * @param fieldName    字段名稱(chēng)
     * @param orderPattern 排序模式
     * @return
     */
    public ListOrderUtil setOrderField(String fieldName, int orderPattern) {
        this.mOrderList.put(fieldName, orderPattern);
        return this;
    }

    /**
     * 對(duì)數(shù)據(jù)集合進(jìn)行排序
     *
     * @return
     */
    public List order() {
        this.mArrayList.sort(new Comparator() {
            @Override
            public int compare(T o1, T o2) {
                Field field = null;
                int order = 0;
                for (Map.Entry item : mOrderList.entrySet()) {
                    try {
                        field = mClass.getDeclaredField(item.getKey());
                        field.setAccessible(true);
                        if (field == null) {
                            throw new NoSuchFieldException(item.getKey());
                        }
                        if (item.getValue() == ORDER_ASC) {
                            order = field.get(o1).toString().compareTo(field.get(o2).toString());
                        } else {
                            order = field.get(o2).toString().compareTo(field.get(o1).toString());
                        }
                        if (order != 0) {
                            return order;
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                return 0;
            }
        });
        return this.mArrayList;
    }


}
使用案例

首先是對(duì)象一枚!

import java.util.Comparator;

public class Students {
    private int studentId;
    private int age;
    private String studentName;

    public Students() {
    }

    public Students(int studentId, int age, String studentName) {
        this.studentId = studentId;
        this.age = age;
        this.studentName = studentName;
    }

    public int getStudentId() {
        return studentId;
    }

    public void setStudentId(int studentId) {
        this.studentId = studentId;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

}

先來(lái)看看不封裝的時(shí)候如何排序:

大量的邏輯處理代碼冗余......

public class Main {

    public static void main(String[] args) {

        //添加測(cè)試數(shù)據(jù)
        ArrayList students = new ArrayList<>();

        Students students1 = new Students(1001, 22, "djk");
        Students students2 = new Students(1002, 18, "xxh");
        Students students3 = new Students(1003, 31, "wyd");
        Students students4 = new Students(1002, 18, "wxz");
        Students students5 = new Students(1005, 19, "sxn");
        Students students6 = new Students(1004, 32, "ljc");

        students.add(students1);
        students.add(students2);
        students.add(students3);
        students.add(students4);
        students.add(students5);
        students.add(students6);
        //-------------不封裝的寫(xiě)法----------------------------不堪入目啊?。。。?        //1、使用studentId正序排列
        Collections.sort(students, new Comparator() {
            @Override
            public int compare(Students o1, Students o2) {
                return o1.getStudentId() - o2.getStudentId();
            }
        });
        //2、使用studentId和age進(jìn)行多字段排序,studentId正序?yàn)槭?,若想等便以age進(jìn)行倒序排列。
        Collections.sort(students, new Comparator() {
            @Override
            public int compare(Students o1, Students o2) {
                int order = o1.getStudentId() - o2.getStudentId();
                if (order == 0) {
                    order = o2.getAge() - o1.getAge();
                }
                return order;
            }
        });
        //3、多字段排序
        Collections.sort(students, new Comparator() {
            @Override
            public int compare(Students o1, Students o2) {
                int order = o1.getStudentId() - o2.getStudentId();
                if (order == 0) {
                    order = o2.getAge() - o1.getAge();
                }
                if (order == 0) {
                    order = o2.getStudentName().compareTo(o1.getStudentName());
                }
                return order;
            }
        });

    }
}

再來(lái)看看封裝后的:

舒服多了......

public class Main {

    public static void main(String[] args) {

        //添加測(cè)試數(shù)據(jù)
        ArrayList students = new ArrayList<>();

        Students students1 = new Students(1001, 22, "djk");
        Students students2 = new Students(1002, 18, "xxh");
        Students students3 = new Students(1003, 31, "wyd");
        Students students4 = new Students(1002, 18, "wxz");
        Students students5 = new Students(1005, 19, "sxn");
        Students students6 = new Students(1004, 32, "ljc");

        students.add(students1);
        students.add(students2);
        students.add(students3);
        students.add(students4);
        students.add(students5);
        students.add(students6);

        //排序使用
        ListOrderUtil listOrderUtil = new ListOrderUtil<>(students, Students.class);
        //1、使用studentId正序排列
        listOrderUtil.setOrderField("studentId", ListOrderUtil.ORDER_ASC).order();

        //2、使用studentId和age進(jìn)行多字段排序,studentId正序?yàn)槭?,若想等便以age進(jìn)行倒序排列。
        listOrderUtil.setOrderField("studentId", ListOrderUtil.ORDER_ASC)
                .setOrderField("age", ListOrderUtil.ORDER_DESC);

        //3、多字段排序
        listOrderUtil.setOrderField("studentId", ListOrderUtil.ORDER_ASC)
                .setOrderField("age", ListOrderUtil.ORDER_DESC)
                .setOrderField("studentName", ListOrderUtil.ORDER_DESC)
                .order();
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/77860.html

相關(guān)文章

  • java學(xué)習(xí)(七) —— API集合類(lèi)

    摘要:集合類(lèi)主要負(fù)責(zé)保存盛裝其他數(shù)據(jù),因此集合類(lèi)也被稱(chēng)為容器類(lèi)。所有的集合類(lèi)都位于包下。表示一組對(duì)象,這些對(duì)象也稱(chēng)為的元素。成員方法把集合轉(zhuǎn)成數(shù)組迭代器,集合的專(zhuān)用遍歷方式之接口概述有序的,也稱(chēng)為序列。 前言 在編程中,常常需要集中存放多個(gè)數(shù)據(jù)。從傳統(tǒng)意義上講,數(shù)組是我們的一個(gè)很好的選擇,前提是我們實(shí)現(xiàn)已經(jīng)明確知道我們將要保存的對(duì)象的數(shù)量。 一旦在數(shù)組初始化時(shí)指定了數(shù)組長(zhǎng)度,這個(gè)數(shù)組長(zhǎng)度就...

    senntyou 評(píng)論0 收藏0
  • 方法和數(shù)組就是這么簡(jiǎn)單!

    摘要:數(shù)組就是一個(gè)簡(jiǎn)單的線(xiàn)性序列,這使得元素訪(fǎng)問(wèn)非??焖?。堆區(qū)堆內(nèi)存用來(lái)存放創(chuàng)建的對(duì)象和數(shù)組。堆內(nèi)存中的實(shí)體不再被指向時(shí),啟動(dòng)垃圾回收機(jī)制,自動(dòng)清除,這也是優(yōu)于的表現(xiàn)之一中需要程序員手動(dòng)清除。 showImg(https://segmentfault.com/img/remote/1460000019264541?w=600&h=242); 第三章 方法和數(shù)組 3.1 概述 還記得我們的He...

    darkerXi 評(píng)論0 收藏0
  • Java? 教程(集合接口)

    集合接口 核心集合接口封裝了不同類(lèi)型的集合,如下圖所示,這些接口允許獨(dú)立于其表示的細(xì)節(jié)來(lái)操縱集合,核心集合接口是Java集合框架的基礎(chǔ),如下圖所示,核心集合接口形成層次結(jié)構(gòu)。 showImg(https://segmentfault.com/img/bVbntJW?w=402&h=146); Set是一種特殊的Collection,SortedSet是一種特殊的Set,依此類(lèi)推,另請(qǐng)注意,層次結(jié)構(gòu)...

    elisa.yang 評(píng)論0 收藏0
  • Java013-集合

    摘要:集合框架重點(diǎn)理解用于存儲(chǔ)數(shù)據(jù)的容器。集合容器在不斷向上抽取過(guò)程中。出現(xiàn)了集合體系。,刪除將集合中的元素全刪除,清空集合。刪除集合中指定的對(duì)象。注意刪除成功,集合的長(zhǎng)度會(huì)改變。作用用于取集合中的元素。是集合特有的迭代器。是單列集合是雙列集合 集合框架(重點(diǎn)理解):用于存儲(chǔ)數(shù)據(jù)的容器。特點(diǎn):1:對(duì)象封裝數(shù)據(jù),對(duì)象多了也需要存儲(chǔ)。集合用于存儲(chǔ)對(duì)象。2:對(duì)象的個(gè)數(shù)確定可以使用數(shù)組,但是不確定怎...

    qpal 評(píng)論0 收藏0
  • 工廠模式和“萬(wàn)能”工廠類(lèi)

    摘要:如下工廠類(lèi)文件我們可以發(fā)現(xiàn),通過(guò)工廠類(lèi)的包裝,在調(diào)用工廠類(lèi)方法構(gòu)造對(duì)象時(shí)可以十分輕松地完成任務(wù),而后面的其他任務(wù)則交由工廠類(lèi)的靜態(tài)代碼塊完成。因此我們考慮把這部分代碼寫(xiě)入工廠類(lèi),再生產(chǎn)過(guò)程前進(jìn)行判斷,過(guò)程封裝進(jìn)工廠類(lèi)。 需要構(gòu)造一個(gè)類(lèi)的對(duì)象,我們通常會(huì)用new的方法來(lái)構(gòu)造: A a = new A(); 但是如果隨著這個(gè)對(duì)象被創(chuàng)建的同時(shí)還必須進(jìn)行其他相對(duì)復(fù)雜的操作,...

    LancerComet 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<