在java android中使用两个比较器

时间:2012-09-13 11:38:20

标签: java android collections

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

首先按第一个属性排序,然后按第二个排序,依此类推......

我尝试了类似的事情。

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虽然我已经在我的代码中导入了包

还有其他比较对象的方法

1 个答案:

答案 0 :(得分:1)

你可以用Java制作它(没有Android库)。我现在可以想到两个选择

  1. 写一个比较器,一次比较更多的字段
  2. 写出更多的比较器,每个比较器只比较一个字段
  3. 有两种方法可以比较对象

    可比较的界面

    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;
    }
    

    Source