我有一个包含名为book的类,其中包含3个变量。用compareTo方法对数组进行排序
String name;
int price;
int pages;
我需要梳理这些,但不能用比较的书类接口。有没有办法按名称排序,然后价格和页面?
我有一个包含名为book的类,其中包含3个变量。用compareTo方法对数组进行排序
String name;
int price;
int pages;
我需要梳理这些,但不能用比较的书类接口。有没有办法按名称排序,然后价格和页面?
// create a class for comparing name that implements the comparator interface
class BooknameComparator implements Comparator{
public int compare(Object o1,Object o2){
Student s1=(Student)o1;
Student s2=(Student)o2;
return s1.name.compareTo(s2.name);
}
}
// create a class for comparing price
class PriceComparator implements Comparator{
public int compare(Object o1,Object o2){
Student s1=(Student)o1;
Student s2=(Student)o2;
if(s1.price==s2.price)
return 0;
else if(s1.price>s2.price)
return 1;
else
return -1;
}
}
在主类中,调用排序方法如下:
// for comparison using name
Collections.sort(al,new BooknameComparator());
// for comaprison using price
Collections.sort(al,new PriceComparator());
您可以自定义根据您的需要和这些类
从Vishsh答案排序是解决你的问题 - 你不需要修改Book类,以便根据其字段创建比较器。我将只显示Java 8语法来完成此操作(这更简洁)。
编辑
这是你会如何,如果他们被包含在一个列表中的书籍进行排序:
Collections.sort(bookArray,Comparator.comparing(Book::getName));
Collections.sort(bookArray,Comparator.comparing(Book::getPrice));
Collections.sort(bookArray, Comparator.comparing(Book::getPages));
现在你有一个数组,你可以使用:
Book[] sortedBookArray = Arrays.stream(bookArray).sorted(Comparator.comparing(Book::getPrice)).sorted(Comparator.comparing(Book::getName)).sorted(Comparator.comparing(Book::getPrice)).toArray();
通过做1分钟的研究和了解比较器的东西。 – GhostCat
无法将比较器应用到房屋对象中。 – Oldmanriver
Comparable和Comparator是两个不同的东西。再次说明:这被记录了数十亿次。 – GhostCat