PagedListHolder按多个属性排序

时间:2014-04-08 16:20:47

标签: spring sorting

我想使用spring PagedListHolder实现分页。我看到它使用了从SortDefinition实现的MutableSortDefinition。但是这个MutableSortDefinition只按一个属性排序。我想要做的是按两个属性排序。有谁能告诉我如何实现这个目标?

我正在考虑编写自己的类来实现SortDefinition。但是我看到MutableSortDefintion只有一个equal()方法。这种方法将如何排序?

1 个答案:

答案 0 :(得分:0)

您无法同时对两个字段进行排序。您需要在页面持有者所持有的类中的每个字段上确定排序顺序的优先级。 例如,对字段{[ac,ef],[ab,ad],[ab,bc]}进行排序,按此顺序排序将导致{[ab,ad],[ab,bc],[ac ,ef]}(如果第一个字段相同(例如,ab),则在第二个字段上进行比较)。 假设一个类有2个字段需要进行排序:

    public class MyClass{
        private String field1; //First priority
        private String field2; //Second priority
        ...
    }

在此类上实现比较器:

    public class MyClassComparator implements Comparator<MyClass>{
        @Override
        public int compare(MyClass m1, MyClass m2){
            int compareResult = m1.getField1().compareIgnoreCase(m2.getField1());
            if(compareResult != 0){ //i.e., two field1 are different
                return compareResult;
            }else{//i.e., compare on two field2 and return the result
                return m1.getField2().compareIgnoreCase(m2.getField2());
            }
        }
    }

要排序并将其传递给方法中的pagelistholder:

    //list of Myclass is in myClassList     
    //myClassComparator is instance of MyClassComparator
    Collections.sort(myClassList, myClassComparator);
    PagedListHolder holder = new PagedListHolder<MyClass>(myClassList);