0

我需要使用比较器对对象列表进行排序 我需要嵌套类型排序

例如首先按第一个属性排序,然后按第二个等等..

我尝试过类似的东西..

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();

我在这里遇到的问题是 noclassdefifound 用于比较器链,尽管我已经在我的代码中导入了包

还有其他方法可以比较对象吗

4

1 回答 1

1

您可以在 Java 中进行此操作(无需 Android 库)。我现在能想到两个选择

  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 回答