8

有谁知道Java中的某种比较器工厂,有一个

public Comparator getComparatorForClass(Class clazz) {}

它会为 String、Double、Integer 之类的东西返回比较器,但会有一个

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

对于任意类型。

4

5 回答 5

13

代替:

factory.getComparatorForClass(x.getClass()).compare(x, y)

你可以简单地实现Comparable和编写:

x.compareTo(y)

字符串、原始包装器和标准集合已经实现Comparable

于 2008-10-26T08:47:58.340 回答
10

使用CompareToBuilderCommons Lang。

协助实现 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();
  }
}
于 2008-10-26T08:53:02.823 回答
4

我不知道有什么类似的事情。如果你真的需要这样的东西,自己实现一个应该不会太难。

但是,您能否详细说明为什么需要这样的东西?通常不应该有类的“默认”比较器。如果这个类有某种自然顺序,你真的应该让它实现java.lang.Comparable,并实现Comparable#compareTo(Object) : int

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Comparable.html

于 2008-10-26T08:48:06.080 回答
1

比较器需要扩展..这是基于可重用代码实现..在这些方法中,您可以自定义数据比较..实现很简单..只需实现 Comparator 接口..覆盖它的 compareto 方法和放置比较代码..并返回您认为在值方面更大的..

于 2008-10-26T12:27:12.907 回答
0

Java 中不存在默认比较器。但是,如果您正在使用例如自定义搜索器进行编码,它打算使用比较器而不是 Comparable 类派生类型的 compareTo() 方法,您可以编写一个静态内部比较器类作为默认比较器,只需实现compare() 方法通过调用 compareTo()。

例子:

类 Searcher> { 私有 Comparator 比较器;

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);
    }
}
于 2011-03-26T00:05:55.357 回答