Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用compareTo方法对数组进行排序_Java - Fatal编程技术网

Java 使用compareTo方法对数组进行排序

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

我有一个叫做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 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类。