用于多列排序的Java比较器?
是否有任何Java开源比较器用于比较多个字段的bean以进行多列排序? 每列可以按升序或降序排序。
对于单列排序,可以通过将org.apache.commons.beanutils.BeanComparator
与org.springframework.util.comparator.InvertibleComparator
一起使用来org.springframework.util.comparator.InvertibleComparator
。
我知道这个function写起来非常简单,但重新发明轮子的好处是什么,如果它已经编写和测试过了?
我几个月前写过这篇文章。
public abstract class ChainedComparator implements Comparator { private Comparator next; @Override public int compare(T o1, T o2) { int result = doCompare(o1, o2); if (result == 0) { if (getNext() != null) { return getNext().compare(o1, o2); } } return result; } public abstract int doCompare(T o1, T o2); public Comparator getNext() { return next; } public void setNext(Comparator next) { this.next = next; } }
只需inheritance此类并覆盖doCompare-Method。 然后使用setNext()
在链中设置下一个比较器。 比较器越早出现在这个链中,它就越“重要”。
编辑:
另见我发现的内容: http : //commons.apache.org/collections/api-2.1.1/org/apache/commons/collections/comparators/ComparatorChain.html
这是apache commons集合库的一部分,您可以在此处下载
JSorter是Java中多列排序的另一种开源替代方案。 http://sourceforge.net/projects/jsorter/
我最近编写了一个Comparator来对分隔的String记录中的多个字段进行排序。 它允许您定义分隔符,记录结构和排序规则(其中一些是特定于类型的)。
所需信息以编程方式或通过XML文件播种到Comparator本身。
XML由包嵌入的XSD文件validation。 例如,下面是制表符分隔的记录布局,其中包含四个字段(其中两个是可排序的):
Column One Column Two Column Three 2 true false true Column Four 1 true true true yyyy-MM-dd
然后你会在java中使用它:
Comparator comparator = new RowComparator( new XMLStructureReader(new File("layout.xml")));
图书馆可以在这里找到: