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