Java 使用compareTo方法对数组进行排序
我有一个叫做books的类,它包含3个变量Java 使用compareTo方法对数组进行排序,java,Java,我有一个叫做books的类,它包含3个变量 String name; int price; int pages; 我需要对这些进行排序,但不能在book类上使用compare to接口。有没有一种方法可以按名称、价格和页面进行排序 String name; int price; int pages; // create a class for comparing name that implements the comparator interface class Bookna
String name;
int price;
int pages;
我需要对这些进行排序,但不能在book类上使用compare to接口。有没有一种方法可以按名称、价格和页面进行排序
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;
}
}
在主类中,按如下方式调用sort方法:
String name;
int price;
int pages;
// for comparison using name
Collections.sort(al,new BooknameComparator ());
// for comaprison using price
Collections.sort(al,new PriceComparator ());
您可以根据您的需要定制排序,这些类是问题的解决方案,您不需要修改Book类,以便根据其字段创建比较器。我将展示用于执行此操作的Java8语法(更简洁)
String name;
int price;
int pages;
编辑
String name;
int price;
int pages;
这是如果书籍包含在列表中,您将如何对其进行排序:
String name;
int price;
int pages;
Collections.sort(bookArray,Comparator.comparing(Book::getName));
Collections.sort(bookArray,Comparator.comparing(Book::getPrice));
Collections.sort(bookArray, Comparator.comparing(Book::getPages));
现在已经有了阵列,您可以使用:
String name;
int price;
int pages;
Book[] sortedBookArray = Arrays.stream(bookArray).sorted(Comparator.comparing(Book::getPrice)).sorted(Comparator.comparing(Book::getName)).sorted(Comparator.comparing(Book::getPrice)).toArray();
通过对比较器进行1分钟的研究和学习。不能将比较器实现到房屋对象中。Comparable和Comparator是两种不同的东西。再说一遍:这已经被记录了无数次了。你可以,但是为什么你还要呢?不能修改book类。