是否有人知道Java中的某种Comparator工厂,带有
public Comparator getComparatorForClass(Class clazz) {}
它会返回Comparators,比如String,Double,Integer,但会有
public void addComparatorForClass(Class clazz, Comparator comparator) {}
对于任意类型。
答案 0 :(得分:13)
而不是:
factory.getComparatorForClass(x.getClass()).compare(x, y)
你可以简单地实现Comparable
并写:
x.compareTo(y)
字符串,原始包装器和标准集合已实现Comparable
。
答案 1 :(得分:10)
使用Commons Lang的CompareToBuilder
。
协助实现Comparable.compareTo(Object)方法。
要使用此类,请按如下方式编写代码:
public class MyClass { String field1; int field2; boolean field3; ... public int compareTo(Object o) { MyClass myClass = (MyClass) o; return new CompareToBuilder() .appendSuper(super.compareTo(o) .append(this.field1, myClass.field1) .append(this.field2, myClass.field2) .append(this.field3, myClass.field3) .toComparison(); } }
答案 2 :(得分:4)
我不知道有什么比这更重要的了。如果你真的需要这样的东西,那么自己实现它应该不会太难。
但是,您能详细说明为什么需要这样的东西吗?通常不应该有类的“默认”比较器。如果该类具有某种自然顺序,那么您真的应该实现java.lang.Comparable
,并实现Comparable#compareTo(Object) : int
。
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Comparable.html
答案 3 :(得分:1)
比较器需要扩展..这是基于可重用的代码实现..在这些方法中你可以有一个自定义的数据比较..实现很简单..只需实现Comparator接口..覆盖它的比较方法并放置比较代码..并返回你认为更大的值..
答案 4 :(得分:0)
Java中不存在默认比较器。但是,如果您正在编写,例如,打算使用比较器而不是Comparable类的派生类型的compareTo()方法的自定义搜索器,您可以编写一个静态内部比较器类作为默认比较器,只需实现通过调用compareTo()来比较compare()方法。
示例:
类搜索者> { 私人比较器比较器;
Searcher(Comparator<T> comparator) {
this.comparator = comparator;
}
Searcher() {
this(new DefaultComparator<T>());
}
int search(...) {
...
}
private static class DefaultComparator<E extends Comparable<E>>
implements Comparator<E> {
public int compare(E o1, E o2) {
return o1.compareTo(o2);
}
}