我有一个包含3个对象的ArrayList。在我的案例中,每个对象都是一本新书。每本书都有不同的标题,零售价格,库存数量等值。
如何比较和排序所有对象的零售价格。我听说过
Collections.sort(books, new Comparator<BookInfo>(){
@Override
public int compare(BookInfo book1, BookInfo book2) {
return book1.getTitle().compareTo(book2.getTitle());
}
});
使用自定义Comparator,但我不能将compareTo
方法用于双精度/整数。我如何实现这一点,或者更改它以便我可以比较双打/整数?
答案 0 :(得分:2)
你总是可以这样做
假设:价格值为Double
Collections.sort(books, new Comparator<BookInfo>(){
@Override
public int compare(BookInfo book1, BookInfo book2) {
return book1.getPrice().compareTo(book2.getPrice());
}
});
答案 1 :(得分:1)
尝试转换为Double类,然后比较:
Collections.sort(books, new Comparator<BookInfo>(){
@Override
public int compare(BookInfo book1, BookInfo book2) {
Double p1 = book1.getRetailPrice();
Double p2 = book2.getRetailPrice();
return p1.compareTo(p2);
}
});
如果您想在价格之后先排序,在名称之后排序第二:
Collections.sort(books, new Comparator<BookInfo>(){
@Override
public int compare(BookInfo book1, BookInfo book2) {
Double p1 = book1.getRetailPrice();
Double p2 = book2.getRetailPrice();
int res = p1.compareTo(p2);
if(res == 0){
return book1.getTitle().compareTo(book2.getTitle());
}
return res;
}
});
答案 2 :(得分:1)
您可以根据需要实现Comparator
,只需要返回正确的值,具体取决于两个对象的比较:
book1 < book2
,则为book1 > book2
0如果book1 == book2
Collections.sort(books, new Comparator<BookInfo>() {
@Override
public int compare(BookInfo book1, BookInfo book2) {
if (book1.getPrice() < book2.getPrice()) {
return -1;
} else if (book1.getPrice() > book2.getPrice()) {
return 1;
} else return 0;
}
});
这样您就可以自定义Comparator
的行为。