Java对象排序

Product.java

package com.exercise.base.对象排序;

import java.util.Date;

public class Product {
	 private String name;   
	 private Date date;   
	 private int price;
	 private int id;
	 
	 
	 
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	 
	 
}
ProductComparable.java

package com.exercise.base.对象排序;

import java.util.Comparator;
import java.util.Date;

public class ProductComparable implements Comparator<Product> {

	// 对象的排序方式[升、降]   
    public static boolean sortASC = true;   
  
    // 对象的排序属性   
    public static boolean sortByName = false;   
    public static boolean sortByDate = false;   
    public static boolean sortByPrice = false; 
    
    
	@Override
	public int compare(Product pro1, Product pro2) {
		// TODO Auto-generated method stub
		int result = 0;   
        
        if(sortASC){ 
        	
        	//按 某一种属性 升序排列
            /*
             if(sortByName){   
                String pro1name = pro1.getName();   
                String pro2name = pro2.getName();   
                result = pro1name.compareTo(pro2name);   
            }else if(sortByDate){   
                Date pro1Date = pro1.getDate();   
                Date pro2Date = pro2.getDate();   
                   
                result = pro1Date.compareTo(pro2Date);   
                   
            }else if(sortByPrice){   
                Integer pro1Price = pro1.getPrice();   
                Integer pro2Price = pro2.getPrice();   
                   
                result = pro1Price.compareTo(pro2Price);   
            }*/
        	
        	
        	//先按价格排序  如果价格相同  再按名称排序  如果价格和名称都相同  再按 时间排序
        	if(sortByPrice){   
                Integer pro1Price = pro1.getPrice();   
                Integer pro2Price = pro2.getPrice();   
                   
                result = pro1Price.compareTo(pro2Price);   
            }
        	if(sortByPrice&&result==0&&sortByName){ //如果价格相同  再按名称排序
                String pro1name = pro1.getName();   
                String pro2name = pro2.getName();   
                result = pro1name.compareTo(pro2name);   
            }
        	if(sortByPrice&&sortByName&&result==0&&sortByDate){ //如果价格和名称都相同  再按 时间排序 
                Date pro1Date = pro1.getDate();   
                Date pro2Date = pro2.getDate();   
                   
                result = pro1Date.compareTo(pro2Date);   
                   
            }
        	
            
            
        }else{ 
        	
        	
        	
        	//按 某一种属性 降序排列
            if(sortByName){   
                String pro1name = pro1.getName();   
                String pro2name = pro2.getName();   
                   
                result =  -pro1name.compareTo(pro2name);   
            }else if(sortByDate){   
                Date pro1Date = pro1.getDate();   
                Date pro2Date = pro2.getDate();   
                   
                result =  -pro1Date.compareTo(pro2Date);   
                   
            }else if(sortByPrice){   
                Integer pro1Price = pro1.getPrice();   
                Integer pro2Price = pro2.getPrice();   
                   
                result =  -pro1Price.compareTo(pro2Price);   
            }   
        }   
        return result;
	}

}

Test.java

package com.exercise.base.对象排序;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws ParseException {
		// TODO Auto-generated method stub
		Product pro1 = new Product(); 
		pro1.setId(1);
        pro1.setName("proc5");   
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-dd-MM",Locale.CHINA);   
        pro1.setDate(sdf.parse("2009-03-23"));   
        pro1.setPrice(89);   
        Product pro2 = new Product();
        pro2.setId(2);
        pro2.setName("proc2");   
        pro2.setDate(sdf.parse("2009-02-23"));   
        pro2.setPrice(89);   
        Product pro3 = new Product(); 
        pro3.setId(3);
        pro3.setName("proc2");   
        pro3.setDate(sdf.parse("2009-01-23"));   
        pro3.setPrice(89);   
        Product pro4 = new Product();
        pro4.setId(4);
        pro4.setName("proc4");   
        pro4.setDate(sdf.parse("2009-01-23"));   
        pro4.setPrice(80);   
           
           
        List<Product> productList = new ArrayList<Product>();   
        productList.add(pro1);   
        productList.add(pro3);   
        productList.add(pro2);   
        productList.add(pro4);   
           
        System.out.println("排序前————————————————————");   
        for(Product p: productList){   
            System.out.println(p.getId()+"---"+p.getName()+"----"+p.getPrice()+"----"+p.getDate());   
        }   
        ProductComparable sort = new ProductComparable();   
           
        ProductComparable.sortASC = true;//升序
        ProductComparable.sortByPrice=true;
        ProductComparable.sortByName=true;
        ProductComparable.sortByDate=true;  //设置排序属性生效 
        Collections.sort(productList,sort);   
       
        
        System.out.println("本测试:先按价格排序  如果价格相同  再按名称排序  如果价格和名称都相同  再按 时间排序!");   
        System.out.println("排序后————————————————————");   
        for(Iterator<Product>  iter = productList.iterator(); iter.hasNext();){   
            Product p = iter.next();   
            System.out.println(p.getId()+"---"+p.getName()+"----"+p.getPrice()+"---"+p.getDate());   
        }   
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值