<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    無線&移動互聯網技術研發

    換位思考·····
    posts - 19, comments - 53, trackbacks - 0, articles - 283
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    list 集合的排序

    Posted on 2009-06-09 23:43 Gavin.lee 閱讀(1488) 評論(0)  編輯  收藏 所屬分類: java SE & EE

    還不錯的通用排序

    package com.Gavin.tools.sortlist;

    import java.sql.Date;

    class Person {
        
    public Person() {
        }


        
    private String name;

        
    private int age;

        
    private long salary;

        
    private Date date;
        
        
    public Date getDate() {
            
    return date;
        }


        
    public void setDate(Date date) {
            
    this.date = date;
        }


        
    public long getSalary() {
            
    return salary;
        }


        
    public void setSalary(long salary) {
            
    this.salary = salary;
        }


        
    public int getAge() {
            
    return age;
        }


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


        
    public String getName() {
            
    return name;
        }


        
    public void setName(String name) {
            
    this.name = name;
        }

    }



    package com.Gavin.tools.sortlist;

    import java.lang.reflect.Method;
    import java.util.Comparator;

    class CommonComparator implements Comparator {
        
    /***************************************************************************
         * 
    @param 比較對象的屬性用String[]的形式傳過來
         *            比較的對象一定要符合javaBean,即要有Set,Get方法
         
    */

        String[] fields_user 
    = null;

        
    public String[] getFields_user() {
            
    return fields_user;
        }


        
    public void setFields_user(String[] fields_user) {
            
    this.fields_user = fields_user;
        }


        
    /**
         * 定義排序規則 如果按照不止一個屬性進行排序 這按照屬性的順序進行排序,類是sql order by 即只要比較出同位置的屬性就停止
         
    */

        
    public int compare(Object obj1, Object obj2) {
            
    // 沒有屬性,則不排序
            if (fields_user == null || fields_user.length <= 0{
                
    return 2;// 不比較
            }

            
    for (int i = 0; i < fields_user.length; i++{
                
    if (compareField(obj1, obj2, fields_user[i])) {
                    
    // 如果obj1的屬性值大于obj2的屬性值,則返回正數
                    return 1;
                }
     else {
                    
    // 小于返回負數
                    return -1;
                }

            }

            
    // 相等返回0
            return 0;
        }


        
    /**
         * 
    @param fieldName
         *            根據屬性名排序
         
    */

        
    private static boolean compareField(Object o1, Object o2, String fieldName) {
            
    try {
                String value1 
    = getFieldValueByName(fieldName, o1).toString();
                String value2 
    = getFieldValueByName(fieldName, o2).toString();

                
    if (value1.compareTo(value2) > 0{
                    
    return true;
                }

            }
     catch (Exception e) {
                System.out.println(
    "-----------------------------------------------------------------------------");
                System.out.println(
    "---------對象的該屬性不存在或者不允許在此安全級別上反射該屬性,詳情請查閱JAVA DOC--------");
                System.out.println(
    "-----------------------------------------------------------------------------");
                e.printStackTrace();
            }

            
    return false;
        }


        
    /**
         * 
    @param fieldName
         *            屬性名 obj 對象 反射獲得該屬性的值
         
    */

        
    private static Object getFieldValueByName(String fieldName, Object obj) {
            
    try {
                String Letter 
    = fieldName.substring(01).toUpperCase();
                String methodStr 
    = "get" + Letter + fieldName.substring(1);
                Method method 
    = obj.getClass().getMethod(methodStr, new Class[] {});

                Object value 
    = method.invoke(obj, new Object[] {});
                
    return value;
            }
     catch (Exception e) {
                System.out.println(
    "------------------------------------------------------");
                System.out.println(
    "---------該" + fieldName     + "屬性不存在----------------------");
                System.out.println(
    "------------------------------------------------------");
                
    return null;
            }

        }


        
    }



    package com.Gavin.tools.sortlist;

    import java.lang.reflect.Method;

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

    public class ObjectSort {

        
    public List<Person> createlist() {
            List
    <Person> demolist = new ArrayList<Person>();

            Person p1 
    = new Person();
            p1.setName(
    "張三");
            p1.setAge(
    20);
            p1.setSalary(
    2000);
            

            Person p2 
    = new Person();
            p2.setName(
    "李四");
            p2.setAge(
    22);
            p2.setSalary(
    1800);

            Person p3 
    = new Person();
            p3.setName(
    "王五");
            p3.setAge(
    25);
            p3.setSalary(
    1900);

            Person p4 
    = new Person();
            p4.setName(
    "趙六");
            p4.setAge(
    25);
            p4.setSalary(
    3000);

            Person p5 
    = new Person();
            p5.setName(
    "劉七");
            p5.setAge(
    30);
            p5.setSalary(
    2000);

            Person p6 
    = new Person();
            p6.setName(
    "馬八");
            p6.setAge(
    26);
            p6.setSalary(
    1900);
            
            demolist.add(p1);
            demolist.add(p2);
            demolist.add(p3);
            demolist.add(p4);
            demolist.add(p5);
            demolist.add(p6);
            
            
    return demolist;
        }

        
        
        
        
    public static void main(String[] args) {
            
    /***********************************************************************
             * 根據對象的某個或者某些屬性排序
             * 使用時只要將對象屬性列表和需要排序的List傳入即可
             *********************************************************************
    */

            List
    <Person> demolist = new ObjectSort().createlist();

            
    // *********開始比較********//
            CommonComparator comparator = new CommonComparator();        

            System.out.println(
    "------1.按照月薪和年齡從低到高比較---------");
            comparator.setFields_user(
    new String[] {"salary""age" });
            Collections.sort(demolist, comparator);
            
    for (int i = 0; i < demolist.size(); i++{
                Person person 
    = (Person) demolist.get(i);
                System.out.println(
    "用戶名:" + person.getName() + " 年齡:" + person.getAge() + " 月薪:" + person.getSalary());
            }

        }

    }





    主站蜘蛛池模板: 无码精品国产一区二区三区免费 | 亚洲精品乱码久久久久久久久久久久| xxxxxx日本处大片免费看| 亚洲精品蜜桃久久久久久| aⅴ在线免费观看| 国产精品亚洲一区二区无码 | 青娱乐在线免费观看视频| 国产亚洲精品自在久久| 毛片高清视频在线看免费观看| 一级女性全黄久久生活片免费| 久久久亚洲欧洲日产国码二区 | 亚洲欧洲日产国产最新| 国产免费啪嗒啪嗒视频看看| 久久国产乱子伦精品免费看| 国产精品亚洲AV三区| 亚洲国产一区二区三区青草影视 | 国产高清免费在线| 日本在线免费观看| 国产精品亚洲专一区二区三区| 在线电影你懂的亚洲| 免费v片在线观看| 五月亭亭免费高清在线| 精品国产免费人成网站| 亚洲一级片在线播放| 亚洲精品高清国产一线久久| 免费理论片51人人看电影| 午夜精品一区二区三区免费视频| 午夜亚洲乱码伦小说区69堂| 久久久久亚洲AV无码专区首JN| 亚洲五月午夜免费在线视频| 最新猫咪www免费人成| 日本中文字幕免费高清视频| 高清免费久久午夜精品| 亚洲人成电影网站免费| 亚洲激情电影在线| 亚洲AV无码久久寂寞少妇| 免费一区二区视频| 成人免费视频网址| jjizz全部免费看片| 国产三级在线免费| 91精品成人免费国产|