用于多列排序的Java比较器?

是否有任何Java开源比较器用于比较多个字段的bean以进行多列排序? 每列可以按升序或降序排序。

对于单列排序,可以通过将org.apache.commons.beanutils.BeanComparatororg.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"))); 

图书馆可以在这里找到:

http://sourceforge.net/projects/multicolumnrowcomparator/