#Comparable case
import java.util.Arrays;
public class ComparableTest {
public static void main(String[] args) {
Goods[] goods = new Goods[]{
new Goods("Phone", 5000),
new Goods("TV", 3500),
new Goods("Computer", 10000)
};
Arrays.sort(goods);
System.out.println(Arrays.toString(goods));
}
}
class Goods implements Comparable {
private final String goodsName;
private final int goodsPrice;
public Goods(String goodsName, int goodsPrice) {
this.goodsName = goodsName;
this.goodsPrice = goodsPrice;
}
@Override
public String toString() {
return "goodsName:" + goodsName + ",goodsPrice:" + goodsPrice + "\n";
}
/**
* 如果当前对象this大于形参对象obj,则返回正整数
* 如果当前对象this小于形参对象obj,则返回负整数
* 如果当前对象this等于形参对象obj,则返回零
* @param o 传入的待排序类
* @return 比较值
*/
@Override
public int compareTo(Object o) {
if (o instanceof Goods) {
Goods goods = (Goods) o; //首先需要强转类型
/*
* 价格比较方式一
* if (this.goodsPrice > goods.goodsPrice) {
* return 1;
* } else if (this.goodsPrice < goods.goodsPrice) {
* return -1;
* } else return 0;
*/
/*
* 价格比较方式二,调用xxx.compare()方法
*/
return Integer.compare(this.goodsPrice, goods.goodsPrice);
/*
* 商品名称比较,因为String类型重写了compareTo方法,所以可以直接调用compareTo方法
* return this.goodsName.compareTo(goods.goodsName);
*/
} else throw new RuntimeException("传入的类型不一致");
}
}
运行结果:
[goodsName:TV,goodsPrice:3500
, goodsName:Phone,goodsPrice:5000
, goodsName:Computer,goodsPrice:10000
]
#Comparator case
import java.util.Arrays;
import java.util.Comparator;
public class ComparatorTest {
public static void main(String[] args) {
Books[] books = new Books[] {
new Books("Core Java", 200),
new Books("Effective Java", 189),
new Books("Effective Java", 179),
new Books("Mysql", 210)
};
//new一个Comparator匿名对象,泛型参数为Books类
Arrays.sort(books, new Comparator<Books>() {
@Override
public int compare(Books o1, Books o2) {
if (o1 instanceof Books && o2 instanceof Books) {
Books b1 = (Books) o1;
Books b2 = (Books) o2;
if (b1.getBookName().equals(b2.getBookName())) {
return Integer.compare(b1.getBookPrice(), b2.getBookPrice());
} else return b1.getBookName().compareTo(b2.getBookName());
} else throw new RuntimeException("传入的类型不一致");
}
});
System.out.println(Arrays.toString(books));
}
}
class Books{
private String bookName;
private int bookPrice;
public Books(String bookName, int bookPrice) {
this.bookName = bookName;
this.bookPrice = bookPrice;
}
public String getBookName() {
return bookName;
}
public int getBookPrice() {
return bookPrice;
}
@Override
public String toString() {
return "Books{" +
"bookName='" + bookName + '\'' +
", bookPrice=" + bookPrice +
"}\n";
}
}
运行结果:
[Books{bookName='Core Java', bookPrice=200}
, Books{bookName='Effective Java', bookPrice=179}
, Books{bookName='Effective Java', bookPrice=189}
, Books{bookName='Mysql', bookPrice=210}
]