我有一個包含名爲book的類,其中包含3個變量。用compareTo方法對數組進行排序
String name;
int price;
int pages;
我需要梳理這些,但不能用比較的書類接口。有沒有辦法按名稱排序,然後價格和頁面?
我有一個包含名爲book的類,其中包含3個變量。用compareTo方法對數組進行排序
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;
}
}
在主類中,調用排序方法如下:
// for comparison using name
Collections.sort(al,new BooknameComparator());
// for comaprison using price
Collections.sort(al,new PriceComparator());
您可以自定義根據您的需要和這些類
從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();
通過做1分鐘的研究和了解比較器的東西。 – GhostCat
無法將比較器應用到房屋對象中。 – Oldmanriver
Comparable和Comparator是兩個不同的東西。再次說明:這被記錄了數十億次。 – GhostCat