Есть ли библиотека для сравнения значений примитивного типа? - PullRequest
5 голосов
/ 01 сентября 2011

Я реализую интерфейс Comparable в тривиальном классе, который включает один int член.

Я могу реализовать это так:

    @Override
    public int compareTo ( final MyType o )
    {
        return
            Integer.valueOf( this.intVal ).compareTo(
                Integer.valueOf( o.intVal )
            );
    }

Но это (возможно) создает 2 совершенно ненужных целочисленных объекта.

Или я могу использовать проверенный и вырезанный подход из класса Integer:

    @Override
    public int compareTo ( final MyType o )
    {
      int thisVal = this.intValue;
      int anotherVal = o.intValue;
      return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1));
    }

Это довольно эффективно, но дублировать код не нужно.

Есть ли библиотека, в которой реализован этот отсутствующий метод Integer (и Double and Float)?

   public static int compare ( int v1, int v2 );

Ответы [ 4 ]

6 голосов
/ 31 июля 2013

В Java 7 static int compare для примитивных типов было добавлено во все классы обёрток примитивных объектов, т. Е. Теперь есть:

java.lang.Integer: static int compare( int x, int y );
java.lang.Byte: static int compare( byte x, byte y );
java.lang.Short: static int compare( short x, short y );
etc...
6 голосов
/ 01 сентября 2011
  • Для int напишите свой собственный метод compare (для этого требуется не более трех строк код).
  • Для double используйте Double.compare (не путать с compareTo).
  • Для float используйте Float.compare.

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

2 голосов
/ 01 сентября 2011

Может быть, я что-то упустил, но ИМХО это странный вопрос.

Есть ли библиотека, которая бы реализовала этот отсутствующий Integer (и Double and Float) метод?

public static int compare ( int v1, int v2 );

Ну, я думаю, что это делает работу:

public static int compare ( int v1, int v2 )
{
    if (v1 < v2) return -1;
    if (v1 > v2) return  1;
    return 0;
}
0 голосов
/ 01 сентября 2011

Это простое, но, возможно, упрощенное решение:

public static int compare ( int v1, int v2 )
{
    return v1 - v2;
}

Примечание: @aix правильный! Этот подход не будет работать для произвольных целых чисел. Это будет работать для всегда положительных целых чисел, например, автоматически сгенерированных ключей базы данных и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...