是否有任何Java开源比较器通过多个字段进行多列排序比较bean ?每一列可以按升序或降序排序。
对于单列排序,可以同时使用org.apache.commons.beanutils.BeanComparator
和org.springframework.util.comparator.InvertibleComparator
来实现。
我知道这个功能写起来很琐碎,但是如果已经写好并测试过了,重新发明轮子又有什么好处呢?
这是我几个月前写的。
public abstract class ChainedComparator<T> implements Comparator<T> {
private Comparator<T> 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<T> getNext() {
return next;
}
public void setNext(Comparator<T> next) {
this.next = next;
}
}
从这个类继承并重写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,用于对分隔字符串记录中的多个字段进行排序。它允许您定义分隔符、记录结构和排序规则(其中一些是特定于类型的)。
所需的信息以编程方式或通过XML文件播种到Comparator本身。
XML由包内嵌的XSD文件验证。例如,下面是一个带有四个字段(其中两个是可排序的)的选项卡分隔的记录布局:
<?xml version="1.0" encoding="ISO-8859-1"?>
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<delimiter>	</delimiter>
<column xsi:type="Decimal">
<name>Column One</name>
</column>
<column xsi:type="Integer">
<name>Column Two</name>
</column>
<column xsi:type="String">
<name>Column Three</name>
<sortOrder>2</sortOrder>
<trim>true</trim>
<caseSensitive>false</caseSensitive>
<stripAccents>true</stripAccents>
</column>
<column xsi:type="DateTime">
<name>Column Four</name>
<sortOrder>1</sortOrder>
<ascending>true</ascending>
<nullLowSortOrder>true</nullLowSortOrder>
<trim>true</trim>
<pattern>yyyy-MM-dd</pattern>
</column>
</row>
在java中可以这样使用:
Comparator<String> comparator = new RowComparator(
new XMLStructureReader(new File("layout.xml")));
库可以在这里找到:
http://sourceforge.net/projects/multicolumnrowcomparator/