2017-05-14 3 views
-5

私は3つの変数を含む呼び出される本を含むクラスを持っています。compareToメソッドを使用した配列の並べ替え

String name; 
int price; 
int pages; 

これらは並べ替える必要がありますが、ブッククラスの比較Toインターフェイスは使用できません。名前で並べ替えてからページに価格を付ける方法はありますか?次のように

あなたのメインクラスで
+3

そのコンパレータのことについて、1分間の研究と学習を行うことによって。 – GhostCat

+0

houseオブジェクトにComparatorを実装できません。 – Oldmanriver

+4

ComparableとComparatorは2つの異なるものです。繰り返しますが、これは何百回も記録されています。 – 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; 
}  

    } 

、sortメソッドを呼び出します。

// 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(); 
関連する問題