我有一个包含3个变量的名为books的类。
String name;
int price;
int pages;
我需要对这些进行排序,但不能使用book类中的compare To接口。有没有办法按名称排序然后按价格排序?
答案 0 :(得分:0)
// 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;
}
}
在您的主类中,按如下方式调用sort方法:
// for comparison using name
Collections.sort(al,new BooknameComparator ());
// for comaprison using price
Collections.sort(al,new PriceComparator ());
您可以根据自己的需求和这些类自定义排序
答案 1 :(得分:0)
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();