0

コンパレータを使用してオブジェクトリストを並べ替える必要がありますネストされた型の並べ替えが必要です

たとえば、最初のプロパティで最初に並べ替え、次に2番目のプロパティで並べ替えます。

私は次のようなことを試みました。

dinerlist = repository.Retrieve();
            ComparatorChain chain = new ComparatorChain();
            chain.addComparator(new TagEntry.SortByUsertype());
            chain.addComparator(new TagEntry.SortByCompany());
            chain.addComparator(new TagEntry.SortByUsername());
            Collections.sort(dinerlist, chain);
            size = dinerlist.size();

ここで発生する問題は、コードにパッケージをインポートしたにもかかわらず、comparatorchainのnoclassdefifoundです。

オブジェクトを比較する他の方法もあります

4

1 に答える 1

1

これはJavaで作成できます(Androidライブラリなし)。私は今2つのオプションを考えることができます

  1. より多くのフィールドを一度に比較する1つのコンパレータを記述します
  2. それぞれが1つのフィールドのみを比較するコンパレータをさらに作成します

そして、オブジェクトを比較する方法は2つあります

同等のインターフェース

public class Foo implements Comparable<Foo> {
    public int compareTo(Foo foo) {
        // compare them
    }
}

カスタムコンパレータ-これをに渡すことができますCollections.sort

public class CustomComparator implements Comparator<Foo> {

    public int compare(Foo foo1, Foo foo2) {
        // compare them
    }
}

より多くのカスタムコンパレータを作成し、同様の(単なる生のコードです)メソッドを使用してそれらすべてを処理することをお勧めします

public int compare(Object o1, Object o2) throws UnsupportedOperationException {

    BitSet orderingBits = new BitSet();

    // get iterator for a List of comparators
    Iterator comparators = comparatorList.iterator();
    for (int comparatorIndex = 0; comparators.hasNext(); ++comparatorIndex) {

        Comparator comparator = (Comparator) comparators.next();
        int retval = comparator.compare(o1,o2);
        if (retval != 0) {
            // invert the order if it is a reverse sort
            if (orderingBits.get(comparatorIndex) == true) {
                retval *= -1;
            }

            return retval;
        }

    }

    // if comparators are exhausted, return 0
    return 0;
}

ソース

于 2012-09-13T11:48:16.283 に答える