Java Comparator - PullRequest
       13

Java Comparator

8 голосов
/ 26 октября 2008

Кто-нибудь знает какую-то фабрику Comparator в Java с

public Comparator getComparatorForClass(Class clazz) {}

Возвращает компараторы для таких вещей, как String, Double, Integer, но будет иметь

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

Для произвольных типов.

Ответы [ 5 ]

13 голосов
/ 26 октября 2008

Вместо:

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

Вы можете просто реализовать Comparable и написать:

x.compareTo(y)

String, примитивные оболочки и стандартные коллекции уже реализуют Comparable.

10 голосов
/ 26 октября 2008

Использование CompareToBuilder от Commons 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();
  }
}
4 голосов
/ 26 октября 2008

Я не знаю ничего подобного на макушке. Если вам действительно нужно что-то подобное, это не должно быть слишком сложно реализовать самостоятельно.

Однако не могли бы вы уточнить, почему вам нужно что-то подобное? Обычно для классов не должно быть компаратора «по умолчанию». Если класс имеет какое-то естественное упорядочение, вам действительно нужно, чтобы он реализовал java.lang.Comparable и вместо него реализовал Comparable#compareTo(Object) : int.

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

1 голос
/ 26 октября 2008

Компаратор необходимо расширить .. это основано на реализации кода многократного использования ... в этом методе вы можете иметь пользовательское сравнение данных .. реализация просто проста ... просто реализовать интерфейс компаратора .. переопределить его метод Compareto и поместите код сравнения .. и верните то, что вы считаете более значительным с точки зрения значений ..

0 голосов
/ 26 марта 2011

Компаратор по умолчанию не существует в Java. Однако, если вы кодируете, например, с помощью специального поисковика, который намеревается использовать метод сравнения, а не метод CompareTo () производного типа класса Comparable, вы можете написать статический внутренний класс компаратора в качестве компаратора по умолчанию, просто реализуя метод Compare (), вызывая compareTo ().

Пример:

class Searcher> { частный компаратор компаратор;

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...