2017-05-14 55 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();