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

时间:2017-05-14 07:57:23

标签: java

我有一个包含3个变量的名为books的类。

String name;
int price;
int pages;

我需要对这些进行排序,但不能使用book类中的compare To接口。有没有办法按名称排序然后按价格排序?

2 个答案:

答案 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();