1

私が使用できる次のようなメソッドはありますか?

public List sort(List listToBeSorted, String order, String property){ }

class Person{
    private String name;
    private Date dob;
    private int age; 
}

したがって、上記のメソッドを次のように呼び出すと:

sort(myList, "ascending", "name");

person オブジェクトの「name」プロパティの昇順でリストをソートします。


次のように Comparator を使用してみましたが、実際に必要なものに近づけることができませんでした。

   public class PersonComparator {
    public static final Comparator<Person> NAME_COMPARATOR = new Comparator<Person>() {
        @Override
        public int compare(Person object1, Person object2) {            
            return object1.getName().compareToIgnoreCase(object2.getName());
        }       
    };  
    public static final Comparator<Person> DOB_COMPARATOR = new Comparator<Person>() {
        @Override
        public int compare(Person object1, Person object2) {
            return object1.getDob().compareTo(object2.getDob());
        }       
    };  
    public static final Comparator<Person> AGE_COMPARATOR = new Comparator<Person>() {
        @Override
        public int compare(Person object1, Person object2) {
            return object1.getAge().compareTo(object2.getAge());
        }       
    };  
}

そして、コンパレータを次のように使用しました。

List<Person> myList = new ArrayList<Person>();
Collections.sort(myList, PersonComparator.NAME_COMPARATOR);

編集:

私が与えた例はうまくいきます。ただし、 Person クラスでのみ機能します。オブジェクトの任意のリストに対して機能するメソッドが必要であり、並べ替えるオブジェクトのプロパティだけでなく、必要な順序も指定できます。

4

3 に答える 3

3

Bean Comparatorをチェックしてください。

person オブジェクトの「name」プロパティの昇順でリストをソートします。

並べ替え順序は制御できますが、プロパティ自体ではなく、プロパティにアクセスするメソッドを指定します。

于 2013-06-06T17:01:41.063 に答える
2

昇順と降順の場合、 を使用reverseOrderして異なるComparator. これは Java によって直接サポートされており、順序を逆にする効果を達成するためのかなり標準的な方法です。

パラメータに基づいて異なるフィールドを使用する場合は、そのためにリフレクションが必要になる場合があります。フィールドを比較する前に、フィールドを確認することをお勧めします。それ以外の場合は、または近いものを投げることを選択できます。isAssaignableFrom ComparableIllegalArgumentException

于 2013-06-06T16:50:09.193 に答える