2011-09-01 51 views
5

我在一個簡單的類上實現了Comparable接口,它包裝了一個單一的int成員。是否有一個庫來比較原始類型值?

我可以實現這樣說:

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

但是這(也許)創建2個完全不必要的Integer對象。

或者,我可以去從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和Float)方法?

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

你可以將整數'compareTo()'複製到一個新的方法,該方法需要兩個參數而不是使用'this'? – BenCole

回答

6

在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... 
2

也許,我失去了一些東西,但恕我直言,這是一個奇怪的問題。

有沒有一個庫,可以實現這個缺少Integer(和 雙和浮動)方法?

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; 
} 
+1

通常,代碼只是'返回v1 - v2;' – barjak

+2

@barjak:不,請檢查http://stackoverflow.com/questions/7273091/is-there-a-library-to-compare-primitive-type-值/ 7273222#7273222和它的意見。 –

6
  • 對於int,寫自己的compare方法(它要求最多三行 代碼)。
  • 對於double,請使用Double.compare(不要與 compareTo混淆)。
  • 對於float,請使用Float.compare

最後兩個採取原始類型,從而避免裝箱和拆箱。我可以看到Integer提供了一個類似的compare方法的論據,但事實證明它並不是。

+1

'整數'也有'比較' –

+0

@Steve郭:請鏈接到Javadoc? – NPE

+0

你是對的。我在考慮'compareTo',在這種情況下,他可以執行'Integer.valueOf(i1).compareTo(i2)'。 –

-1

這種解決方案很簡單,但也許簡單:

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

注:@aix是正確的!這種方法不適用於任意整數。它將爲始終保持正整數的工作,雖然,例如自動生成數據庫鍵等

+6

整數溢出怎麼樣? – NPE

+1

@Martijn Courteaux,你是不正確的,'compare'和'compareTo'指定負值,0,正值。它並不指定-1,0 1.任何檢查-1的代碼都是壞的代碼。請參閱http://download.oracle.com/javase/6/docs/api/java/lang/Comparable.html#compareTo%28T%29 –

+1

不,Javadoc對「Comparable」和「Comparable」都表示「負面,零或正面」整數。 – barjak