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

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

          list 集合的排序

          Posted on 2009-06-09 23:43 Gavin.lee 閱讀(1489) 評論(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());
                  }

              }

          }





          主站蜘蛛池模板: 莲花县| 东丽区| 通江县| 商都县| 连云港市| 屯昌县| 石棉县| 密山市| 石柱| 百色市| 玉树县| 呼玛县| 郸城县| 皋兰县| 淄博市| 梓潼县| 和田市| 哈巴河县| 芜湖县| 多伦县| 黑山县| 宝清县| 绥滨县| 司法| 芜湖县| 多伦县| 罗平县| 南郑县| 吐鲁番市| 彰化县| 华蓥市| 哈尔滨市| 迭部县| 天门市| 靖宇县| 陆丰市| 辽阳市| 桂东县| 四子王旗| 炎陵县| 高台县|