2017-05-14 29 views
-5

我有一个包含名为book的类,其中包含3个变量。用compareTo方法对数组进行排序

String name; 
int price; 
int pages; 

我需要梳理这些,但不能用比较的书类接口。有没有办法按名称排序,然后价格和页面?

+3

通过做1分钟的研究和了解比较器的东西。 – GhostCat

+0

无法将比较器应用到房屋对象中。 – Oldmanriver

+4

Comparable和Comparator是两个不同的东西。再次说明:这被记录了数十亿次。 – GhostCat

回答

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; 
}  

    } 

在主类中,调用排序方法如下:

// for comparison using name 
    Collections.sort(al,new BooknameComparator()); 




// for comaprison using price 
    Collections.sort(al,new PriceComparator()); 

您可以自定义根据您的需要和这些类

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