クラスが1つあり、すでに1つの属性で並べ替えています。次に、データを並べ替える別の方法を作成する必要があるという、別のことを行う必要があります。どうすれば作成できるので、2つの方法から選択できます。私が知っている唯一のコマンドは、データを比較するクラスからcompareToメソッドを取得するCollections.sortです。
それも可能ですか?
あなたがする必要があるのはカスタムを実装することです Comparator
。そして、使用します:
Collections.sort(yourList, new CustomComparator<YourClass>());
具体的には、次のように記述できます(これにより、Comparator
を実装するAnonymousクラスが作成されます)。
Collections.sort(yourList, new Comparator<YourClass>(){
public int compare(YourClass one, YourClass two) {
// compare using whichever properties of ListType you need
}
});
必要に応じて、これらをクラスに組み込むことができます。
class YourClass {
static Comparator<YourClass> getAttribute1Comparator() {
return new Comparator<YourClass>() {
// compare using attribute 1
};
}
static Comparator<YourClass> getAttribute2Comparator() {
return new Comparator<YourClass>() {
// compare using attribute 2
};
}
}
それは次のように使用できます:
Collections.sort(yourList, YourClass.getAttribute2Comparator());
クラスに含めることができるcompareTo()
メソッドは1つだけです。
同じクラスを複数の方法でソートする場合は、Comparator
実装を作成します。
2つのメソッドがまったく同じフットプリントを必要とする場合、複数の用途で単一のクラスを不適切にオーバーロードしている可能性があります。これは、クラス階層を修正することで解決されます。たとえば、「shape」を使用する代わりに、「oval」、「rectangle」でサブクラス化します。 、など。
サブクラス化が意味をなさない場合は、異なる比較クラスを作成する必要があります。 Javaでは、比較にコンパレータを使用することがよくあります。 IsbnComparator、AuthorComparatorなどのいくつかを作成します(または構成可能なコンパレータを作成します)。
ああ、設定可能なオプションは次のようになります。
BookComparatorはCompartor { enum FIELD {AUTHOR、ISBN、...}; setSortOrder(intrank、FIELD field){...} }を実装します。