Java对象排序

java实现对象比较,可以实现java.lang.Comparable或java.util.Comparator接口

Code:
  1. //Product.java
  2. import java.util.Date;   
  3.   
  4. //public class Product implements Comparable {//类内比较   
  5. public class Product{   
  6.   
  7.     private String name;   
  8.     private Date date;   
  9.     private int price;   
  10.        
  11.     public int getPrice() {   
  12.         return price;   
  13.     }   
  14.     public void setPrice(int price) {   
  15.         this.price = price;   
  16.     }   
  17.     public String getName() {   
  18.         return name;   
  19.     }   
  20.     public void setName(String name) {   
  21.         this.name = name;   
  22.     }   
  23.     public Date getDate() {   
  24.         return date;   
  25.     }   
  26.     public void setDate(Date date) {   
  27.         this.date = date;   
  28.     }   
  29. //用于类内比较
  30. //  @Override//覆写compareTo(Object o)方法   
  31. //  public int compareTo(Product o) {   
  32. //      return -this.date.compareTo(o.date);   
  33. //  }   
  34.        
  35. }  
Code:
  1. //ProductComparable.java   
  2.   
  3. import java.util.Date;   
  4. import java.util.Comparator;   
  5.   
  6. public class ProductComparable implements Comparator<Product> {   
  7.   
  8.     // 对象的排序方式[升、降]   
  9.     public static boolean sortASC = true;   
  10.   
  11.     // 对象的排序属性   
  12.     public static boolean sortByName = false;   
  13.     public static boolean sortByDate = false;   
  14.     public static boolean sortByPrice = false;   
  15.   
  16.        
  17.     @Override  
  18.     public int compare(Product pro1, Product pro2) {   
  19.   
  20.         int result = 0;   
  21.            
  22.         if(sortASC){   
  23.             if(sortByName){   
  24.                 String pro1name = pro1.getName();   
  25.                 String pro2name = pro2.getName();   
  26.                 result = pro1name.compareTo(pro2name);   
  27.             }else if(sortByDate){   
  28.                 Date pro1Date = pro1.getDate();   
  29.                 Date pro2Date = pro2.getDate();   
  30.                    
  31.                 result = pro1Date.compareTo(pro2Date);   
  32.                    
  33.             }else if(sortByPrice){   
  34.                 Integer pro1Price = pro1.getPrice();   
  35.                 Integer pro2Price = pro2.getPrice();   
  36.                    
  37.                 result = pro1Price.compareTo(pro2Price);   
  38.             }   
  39.         }else{   
  40.             if(sortByName){   
  41.                 String pro1name = pro1.getName();   
  42.                 String pro2name = pro2.getName();   
  43.                    
  44.                 result =  -pro1name.compareTo(pro2name);   
  45.             }else if(sortByDate){   
  46.                 Date pro1Date = pro1.getDate();   
  47.                 Date pro2Date = pro2.getDate();   
  48.                    
  49.                 result =  -pro1Date.compareTo(pro2Date);   
  50.                    
  51.             }else if(sortByPrice){   
  52.                 Integer pro1Price = pro1.getPrice();   
  53.                 Integer pro2Price = pro2.getPrice();   
  54.                    
  55.                 result =  -pro1Price.compareTo(pro2Price);   
  56.             }   
  57.         }   
  58.         return result;   
  59.     }   
  60.   
  61. }  
Code:
  1. //测试代码   
  2.   
  3. import java.text.ParseException;   
  4. import java.text.SimpleDateFormat;   
  5. import java.util.ArrayList;   
  6. import java.util.Collections;   
  7. import java.util.Iterator;   
  8. import java.util.List;   
  9. import java.util.Locale;   
  10.   
  11. public class ProductSort {   
  12.   
  13.     public static void main(String[] args) throws ParseException {   
  14.         Product pro1 = new Product();   
  15.         pro1.setName("pro1");   
  16.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-dd-MM",Locale.CHINA);   
  17.         pro1.setDate(sdf.parse("2009-03-23"));   
  18.         pro1.setPrice(89);   
  19.         Product pro2 = new Product();   
  20.         pro2.setName("proc2");   
  21.         pro2.setDate(sdf.parse("2009-02-23"));   
  22.         pro2.setPrice(45);   
  23.         Product pro3 = new Product();   
  24.         pro3.setName("proc3");   
  25.         pro3.setDate(sdf.parse("2009-01-23"));   
  26.         pro3.setPrice(83);   
  27.         Product pro4 = new Product();   
  28.         pro4.setName("proc4");   
  29.         pro4.setDate(sdf.parse("2009-01-23"));   
  30.         pro4.setPrice(800);   
  31.            
  32.            
  33.         List<Product> productList = new ArrayList<Product>();   
  34.         productList.add(pro1);   
  35.         productList.add(pro3);   
  36.         productList.add(pro2);   
  37.         productList.add(pro4);   
  38.            
  39.         System.out.println("排序前————————————————————");   
  40.         for(Product p: productList){   
  41.             System.out.println(p.getName()+"----"+p.getPrice()+"----"+p.getDate());   
  42.         }   
  43.         ProductComparable sort = new ProductComparable();   
  44.            
  45.         ProductComparable.sortASC = false;//降序   
  46.         ProductComparable.sortByPrice=true;  //设置排序属性生效 
  47.         Collections.sort(productList,sort);   
  48.            
  49.         System.out.println("排序后————————————————————");   
  50.            
  51.         for(Iterator<Product>  iter = productList.iterator(); iter.hasNext();){   
  52.             Product p = (Product)iter.next();   
  53.             System.out.println(p.getName()+"----"+p.getPrice()+"---"+p.getDate());   
  54.         }   
  55.     }   
  56. }  

 推荐使用Comparator实现排序

因为 你用一个第三方的类,但他没实现Comparable接口,而你又不能改他代码;另外,类一旦写好后是不允许修改的,但可以扩展,所以只能用Comparator接口

java实现对象比较,可以实现java.lang.Comparable或java.util.Comparator接口

Code:
  1. //Product.java
  2. import java.util.Date;   
  3.   
  4. //public class Product implements Comparable {//类内比较   
  5. public class Product{   
  6.   
  7.     private String name;   
  8.     private Date date;   
  9.     private int price;   
  10.        
  11.     public int getPrice() {   
  12.         return price;   
  13.     }   
  14.     public void setPrice(int price) {   
  15.         this.price = price;   
  16.     }   
  17.     public String getName() {   
  18.         return name;   
  19.     }   
  20.     public void setName(String name) {   
  21.         this.name = name;   
  22.     }   
  23.     public Date getDate() {   
  24.         return date;   
  25.     }   
  26.     public void setDate(Date date) {   
  27.         this.date = date;   
  28.     }   
  29. //用于类内比较
  30. //  @Override//覆写compareTo(Object o)方法   
  31. //  public int compareTo(Product o) {   
  32. //      return -this.date.compareTo(o.date);   
  33. //  }   
  34.        
  35. }  
Code:
  1. //ProductComparable.java   
  2.   
  3. import java.util.Date;   
  4. import java.util.Comparator;   
  5.   
  6. public class ProductComparable implements Comparator<Product> {   
  7.   
  8.     // 对象的排序方式[升、降]   
  9.     public static boolean sortASC = true;   
  10.   
  11.     // 对象的排序属性   
  12.     public static boolean sortByName = false;   
  13.     public static boolean sortByDate = false;   
  14.     public static boolean sortByPrice = false;   
  15.   
  16.        
  17.     @Override  
  18.     public int compare(Product pro1, Product pro2) {   
  19.   
  20.         int result = 0;   
  21.            
  22.         if(sortASC){   
  23.             if(sortByName){   
  24.                 String pro1name = pro1.getName();   
  25.                 String pro2name = pro2.getName();   
  26.                 result = pro1name.compareTo(pro2name);   
  27.             }else if(sortByDate){   
  28.                 Date pro1Date = pro1.getDate();   
  29.                 Date pro2Date = pro2.getDate();   
  30.                    
  31.                 result = pro1Date.compareTo(pro2Date);   
  32.                    
  33.             }else if(sortByPrice){   
  34.                 Integer pro1Price = pro1.getPrice();   
  35.                 Integer pro2Price = pro2.getPrice();   
  36.                    
  37.                 result = pro1Price.compareTo(pro2Price);   
  38.             }   
  39.         }else{   
  40.             if(sortByName){   
  41.                 String pro1name = pro1.getName();   
  42.                 String pro2name = pro2.getName();   
  43.                    
  44.                 result =  -pro1name.compareTo(pro2name);   
  45.             }else if(sortByDate){   
  46.                 Date pro1Date = pro1.getDate();   
  47.                 Date pro2Date = pro2.getDate();   
  48.                    
  49.                 result =  -pro1Date.compareTo(pro2Date);   
  50.                    
  51.             }else if(sortByPrice){   
  52.                 Integer pro1Price = pro1.getPrice();   
  53.                 Integer pro2Price = pro2.getPrice();   
  54.                    
  55.                 result =  -pro1Price.compareTo(pro2Price);   
  56.             }   
  57.         }   
  58.         return result;   
  59.     }   
  60.   
  61. }  
Code:
  1. //测试代码   
  2.   
  3. import java.text.ParseException;   
  4. import java.text.SimpleDateFormat;   
  5. import java.util.ArrayList;   
  6. import java.util.Collections;   
  7. import java.util.Iterator;   
  8. import java.util.List;   
  9. import java.util.Locale;   
  10.   
  11. public class ProductSort {   
  12.   
  13.     public static void main(String[] args) throws ParseException {   
  14.         Product pro1 = new Product();   
  15.         pro1.setName("pro1");   
  16.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-dd-MM",Locale.CHINA);   
  17.         pro1.setDate(sdf.parse("2009-03-23"));   
  18.         pro1.setPrice(89);   
  19.         Product pro2 = new Product();   
  20.         pro2.setName("proc2");   
  21.         pro2.setDate(sdf.parse("2009-02-23"));   
  22.         pro2.setPrice(45);   
  23.         Product pro3 = new Product();   
  24.         pro3.setName("proc3");   
  25.         pro3.setDate(sdf.parse("2009-01-23"));   
  26.         pro3.setPrice(83);   
  27.         Product pro4 = new Product();   
  28.         pro4.setName("proc4");   
  29.         pro4.setDate(sdf.parse("2009-01-23"));   
  30.         pro4.setPrice(800);   
  31.            
  32.            
  33.         List<Product> productList = new ArrayList<Product>();   
  34.         productList.add(pro1);   
  35.         productList.add(pro3);   
  36.         productList.add(pro2);   
  37.         productList.add(pro4);   
  38.            
  39.         System.out.println("排序前————————————————————");   
  40.         for(Product p: productList){   
  41.             System.out.println(p.getName()+"----"+p.getPrice()+"----"+p.getDate());   
  42.         }   
  43.         ProductComparable sort = new ProductComparable();   
  44.            
  45.         ProductComparable.sortASC = false;//降序   
  46.         ProductComparable.sortByPrice=true;  //设置排序属性生效 
  47.         Collections.sort(productList,sort);   
  48.            
  49.         System.out.println("排序后————————————————————");   
  50.            
  51.         for(Iterator<Product>  iter = productList.iterator(); iter.hasNext();){   
  52.             Product p = (Product)iter.next();   
  53.             System.out.println(p.getName()+"----"+p.getPrice()+"---"+p.getDate());   
  54.         }   
  55.     }   
  56. }  

 推荐使用Comparator实现排序

因为 你用一个第三方的类,但他没实现Comparable接口,而你又不能改他代码;另外,类一旦写好后是不允许修改的,但可以扩展,所以只能用Comparator接口

posted @ 2016-03-12 15:00  为爱奋斗不息  阅读(278)  评论(0编辑  收藏  举报