私は3つの変数を含む呼び出される本を含むクラスを持っています。compareToメソッドを使用した配列の並べ替え
String name;
int price;
int pages;
これらは並べ替える必要がありますが、ブッククラスの比較Toインターフェイスは使用できません。名前で並べ替えてからページに価格を付ける方法はありますか?次のように
あなたのメインクラスで私は3つの変数を含む呼び出される本を含むクラスを持っています。compareToメソッドを使用した配列の並べ替え
String name;
int price;
int pages;
これらは並べ替える必要がありますが、ブッククラスの比較Toインターフェイスは使用できません。名前で並べ替えてからページに価格を付ける方法はありますか?次のように
あなたのメインクラスで// 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());
あなたがカスタマイズすることができ、あなたのニーズと、これらのクラス
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
houseオブジェクトにComparatorを実装できません。 – Oldmanriver
ComparableとComparatorは2つの異なるものです。繰り返しますが、これは何百回も記録されています。 – GhostCat