Comparable的例子:
public class Book implements Comparable<Book> {
private String name;
private double price;
public Book() {
}
public Book(String name, String price) {
this.name = name;
this.price = saveDouble2(price);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(String price) {
this.price = saveDouble2(price);
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", price=" + price +
'}';
}
private double saveDouble2(String price) {
return new BigDecimal(price).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
@Override
public int compareTo(Book book) {
if (this.price > book.price) {
return 1;
} else if (this.price == book.price) {
return 0;
} else {
return -1;
}
}
}
测试类:
public class Test {
public static void main(String[] args) throws Exception {
Book book = new Book("数学书","4578.89552");
Book book2 = new Book("数学书","95.89552");
System.out.println(book.compareTo(book2));
}
}
运行结果:
1
从上面代码可以看出,实现Comparable接口必须重写compareTo方法
Comparator
public class Book {
private String name;
private double price;
public Book() {
}
public Book(String name, String price) {
this.name = name;
this.price = saveDouble2(price);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(String price) {
this.price = saveDouble2(price);
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", price=" + price +
'}';
}
private double saveDouble2(String price) {
return new BigDecimal(price).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
public class BookComparator implements Comparator<Book> {
@Override
public int compare(Book book, Book t1) {
if (book.getPrice() > t1.getPrice()) {
return 1;
} else if (book.getPrice() == t1.getPrice()) {
return 0;
} else {
return -1;
}
}
}
测试类
public class Test {
public static void main(String[] args) throws Exception {
Book[] books = {
new Book("数学书","4578.89552"),
new Book("英语书","95.89552"),
new Book("其他书","95.25552")
};
BookComparator bookComparator = new BookComparator();
//通过Arrays对数组进行排序后反转
Arrays.sort(books,bookComparator.reversed());
System.out.println(Arrays.toString(books));
}
}
运行结果:
[Book{name='数学书', price=4578.9}, Book{name='英语书', price=95.9}, Book{name='其他书', price=95.26}]