<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());
            }

        }

    }





    主站蜘蛛池模板: 亚洲成a人不卡在线观看| 亚洲午夜国产精品无码老牛影视 | 亚洲精品夜夜夜妓女网| 亚洲日韩精品无码专区网址| 无码毛片一区二区三区视频免费播放| 国产性生大片免费观看性| 日本高清免费观看| 好大好硬好爽免费视频| 免费v片在线观看无遮挡| 久久国产亚洲精品无码| 亚洲国产精品无码久久98| 久久久精品国产亚洲成人满18免费网站| 免费人成在线观看网站品爱网| 真实乱视频国产免费观看| 亚洲午夜久久久久久噜噜噜| 曰批全过程免费视频在线观看无码 | 亚洲熟伦熟女新五十路熟妇| 亚洲永久中文字幕在线| 97在线视频免费公开视频| 麻豆国产精品入口免费观看| 国产亚洲欧美在线观看| 久久久久免费看成人影片| 亚洲高清中文字幕免费| 亚洲人成图片小说网站| 精品无码AV无码免费专区| 性xxxx黑人与亚洲| 热re99久久6国产精品免费| 亚洲国产一区在线观看| 免费精品无码AV片在线观看| 亚洲毛片一级带毛片基地| 国产成人免费手机在线观看视频| 亚洲小说区图片区| 青青草国产免费久久久91 | 免费h视频在线观看| 久久精品亚洲男人的天堂| 人禽伦免费交视频播放| 亚洲国产成人精品不卡青青草原| 国产在线精品一区免费香蕉| 亚洲国产成人资源在线软件| 国产亚洲福利一区二区免费看| 亚洲AV无码一区二区乱子仑 |