您的位置:首页 > 编程语言 > Java开发

java comparator 排序 定义比较器内部类的方式排序 通用排序方式 非常灵活

2015-10-15 19:02 621 查看
class Products implements Comparable<Products> {

private String name;

private int num;

private Integer price;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getNum() {

return num;

}

public void setNum(int num) {

this.num = num;

}

public Integer getPrice() {

return price;

}

public void setPrice(Integer price) {

this.price = price;

}

public Products(String name, int num, Integer price) {

super();

this.name = name;

this.num = num;

this.price = price;

}

@Override

public String toString() {

return "Products [name=" + name + ", num=" + num + ", price=" + price+ "]\n";

}

public Products() {

super();

}

@Override

public int compareTo(Products o) {

// 按价格升序排列

//如果当前对象的价格小于参数对象的价格 返回-1

//如果当前对象的价格等于。。。。。。返回0

//如果当前对象的价格大于。。。。。。返回1

return this.price<o.price?-1:this.price>o.price?1:0;

}

----------------------测试代码如下 :

/**

* 测试动态改变比较逻辑

*/

@Test

public void testComparator(){

List<Products> products=new ArrayList<Products>();

products.add(new Products("费罗列",100,30));

products.add(new Products("love",1000,100));

products.add(new Products("德芙",10000000,10));

products.add(new Products("自行车",10000,899));

products.add(new Products("行李箱",8000,569));

products.add(new Products("泳衣",100,180));

//定义比较器 按价格降序

Comparator<Products> byPrice=new Comparator<Products>() {

@Override

public int compare(Products o1, Products o2) {

return o1.getPrice()<o1.getPrice()?-1:o1.getPrice()>o2.getPrice()?1:0;

}

};

//定义比较器 按销量降序

Comparator<Products> byNum=new Comparator<Products>() {

@Override

public int compare(Products o1, Products o2) {

return o1.getNum()<o2.getNum()?-1:o1.getNum()>o2.getNum()?1:0;

}

};

//定义比较器 按销量降序 再按价格升序排列 当销量相等时不返回0 再继续比较单价

Comparator<Products> byNumDes_price=new Comparator<Products>() {

@Override

public int compare(Products o1, Products o2) {

if(o1.getNum()!=o2.getNum()){

return -(o1.getNum()<o2.getNum()?-1:1);

}else{

return o1.getPrice()>o2.getPrice()?1:o1.getPrice()<o2.getPrice()?-1:0;

}

}

};

Collections.sort(products,byPrice);

System.out.println(products);

Collections.sort(products,byNum);

System.out.println(products);

Collections.sort(products,byNumDes_price);

System.out.println(products);

}

-------------------输出内容如下:

[Products [name=德芙, num=10000000, price=10]

, Products [name=费罗列, num=100, price=30]

, Products [name=love, num=1000, price=100]

, Products [name=泳衣, num=100, price=180]

, Products [name=行李箱, num=8000, price=569]

, Products [name=自行车, num=10000, price=899]

]

[Products [name=费罗列, num=100, price=30]

, Products [name=泳衣, num=100, price=180]

, Products [name=love, num=1000, price=100]

, Products [name=行李箱, num=8000, price=569]

, Products [name=自行车, num=10000, price=899]

, Products [name=德芙, num=10000000, price=10]

]

[Products [name=德芙, num=10000000, price=10]

, Products [name=自行车, num=10000, price=899]

, Products [name=行李箱, num=8000, price=569]

, Products [name=love, num=1000, price=100]

, Products [name=费罗列, num=100, price=30]

, Products [name=泳衣, num=100, price=180]

]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: