Java Comparator

时间:2008-10-26 08:40:16

标签: java comparison

是否有人知道Java中的某种Comparator工厂,带有

public Comparator getComparatorForClass(Class clazz) {}

它会返回Comparators,比如String,Double,Integer,但会有

public void addComparatorForClass(Class clazz, Comparator comparator) {}

对于任意类型。

5 个答案:

答案 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);
    }
}