Java 在ArrayList中对对象中的变量进行排序
我有一个ArrayList,里面有3个对象。在我看来,每件物品都是一本新书。每本书的标题、零售价、库存量等都有不同的价值 如何比较和排序所有对象的零售价格。我听说过Java 在ArrayList中对对象中的变量进行排序,java,sorting,arraylist,Java,Sorting,Arraylist,我有一个ArrayList,里面有3个对象。在我看来,每件物品都是一本新书。每本书的标题、零售价、库存量等都有不同的价值 如何比较和排序所有对象的零售价格。我听说过 Collections.sort(books, new Comparator<BookInfo>(){ @Override public int compare(BookInfo book1, BookInfo book2) { return book1.getTitle().compar
Collections.sort(books, new Comparator<BookInfo>(){
@Override
public int compare(BookInfo book1, BookInfo book2) {
return book1.getTitle().compareTo(book2.getTitle());
}
});
Collections.sort(图书、新比较器(){
@凌驾
公共整数比较(BookInfo book1、BookInfo book2){
返回book1.getTitle().compareTo(book2.getTitle());
}
});
使用自定义比较器,但我不能对double/int使用compareTo
方法。我该如何实现或更改它,以便比较double/int?您可以始终这样做
假设:价格值为Double
Collections.sort(books, new Comparator<BookInfo>(){
@Override
public int compare(BookInfo book1, BookInfo book2) {
return book1.getPrice().compareTo(book2.getPrice());
}
});
Collections.sort(图书、新比较器(){
@凌驾
公共整数比较(BookInfo book1、BookInfo book2){
返回book1.getPrice().compareTo(book2.getPrice());
}
});
参考:
你可以一直这样做
假设:价格值为Double
Collections.sort(books, new Comparator<BookInfo>(){
@Override
public int compare(BookInfo book1, BookInfo book2) {
return book1.getPrice().compareTo(book2.getPrice());
}
});
Collections.sort(图书、新比较器(){
@凌驾
公共整数比较(BookInfo book1、BookInfo book2){
返回book1.getPrice().compareTo(book2.getPrice());
}
});
参考:
试着将等级转换为双倍,然后比较:
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(图书、新比较器(){
@凌驾
公共整数比较(BookInfo book1、BookInfo book2){
双p1=book1.getRetailPrice();
Double p2=book2.getRetailPrice();
返回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;
}
});
Collections.sort(图书、新比较器(){
@凌驾
公共整数比较(BookInfo book1、BookInfo book2){
双p1=book1.getRetailPrice();
Double p2=book2.getRetailPrice();
int res=p1。与(p2)相比;
如果(res==0){
返回book1.getTitle().compareTo(book2.getTitle());
}
返回res;
}
});
尝试转换为双级,然后比较:
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(图书、新比较器(){
@凌驾
公共整数比较(BookInfo book1、BookInfo book2){
双p1=book1.getRetailPrice();
Double p2=book2.getRetailPrice();
返回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;
}
});
Collections.sort(图书、新比较器(){
@凌驾
公共整数比较(BookInfo book1、BookInfo book2){
双p1=book1.getRetailPrice();
Double p2=book2.getRetailPrice();
int res=p1。与(p2)相比;
如果(res==0){
返回book1.getTitle().compareTo(book2.getTitle());
}
返回res;
}
});
您可以实现比较器
,但是您只需要根据两个对象的比较返回正确的值:
- 如果
book1
- 如果
book1>book2
- 如果
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; } });
Collections.sort(图书、新比较器(){ @凌驾 公共整数比较(BookInfo book1、BookInfo book2){ if(book1.getPrice()
book2.getPrice()){ 返回1; }否则返回0; } });
通过这种方式,您可以自定义
比较器的任何行为。您可以根据需要实现比较器
,但只需返回正确的值,具体取决于两个对象的比较:
- 如果
book1
- 如果
book1>book2
- 如果
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;
}
});
Collections.sort(图书、新比较器(){
@凌驾
公共整数比较(BookInfo book1、BookInfo book2){
if(book1.getPrice()book2.getPrice()){
返回1;
}否则返回0;
}
});
通过这种方式,您可以自定义比较器的行为。只需使用
来比较基本值。是的,这只适用于比较两个值,但我需要的是比较所有值并对它们进行排序。@user3325783:要对列表进行排序,您只需要一个比较两个值的函数。。。也许可以阅读更多关于排序算法的内容?只需使用
来比较基本值。是的,这只适用于比较两个值,但我需要的是比较所有值并对它们进行排序。@user3325783:要对列表进行排序,您只需要一个比较两个值的函数。。。也许可以多读一些关于排序算法的书?我认为这行不通,因为你不能取消双重限制。而且价格是双倍的,我认为这行不通,因为你不能取消双倍的限制。而且价格是双倍的