2011-09-01 10 views
5

intメンバーをラップする簡単なクラスにComparableインターフェイスを実装しています。プリミティブ型の値を比較するライブラリはありますか?

私はこの方法でそれを実装することができます

@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)メソ​​ッドを実装するライブラリはありますか?

+1

Integer 'compareTo()'を 'this'を使う代わりに二つの引数を取る新しいメソッドにコピーできますか? – BenCole

答えて

6

は、今そこにある、すなわち、すべてのプリミティブオブジェクトのラッパークラスに追加されました。

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(および DoubleとFloat)メソ​​ッドが実装されているライブラリはありますか?

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

まあ、私はこれが仕事をしないと思う:intについては

public static int compare (int v1, int v2) 
{ 
    if (v1 < v2) return -1; 
    if (v1 > v2) return 1; 
    return 0; 
} 
+1

一般的に、コードは 'return v1 - v2;です。 – barjak

+2

@barjak:いいえ、http://stackoverflow.com/questions/7273091/is-there-a-library-to-compare-primitive-type-値/ 7273222#7273222とコメントします。 –

6
  • 、独自のcompareメソッドを書く(それは コードのほとんど三行に必要です)。
  • doubleの場合はDouble.comparecompareToと混同しないでください)を使用してください。
  • floatについては、Float.compareを使用してください。

最後の2つはプリミティブ型を取るため、ボクシングとアンボックスを回避します。私は、同様のcompareメソッドを提供するIntegerの引数を見ることができますが、物事が立っているわけではありません。

+1

'整数 'にも' compare'があります –

+0

@Steve Kuo:Javadocにリンクしてください? – NPE

+0

あなたは正しいです。私はcompareToを考えていました。その場合、Integer.valueOf(i1).compareTo(i2)を実行することができました。 –

-1

このソリューションは、単純な、おそらく単純化され:

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

注:@aixが正しいです!このアプローチは、任意の整数に対しては機能しません。これは、例えば、自動生成されたデータベース・キーなどのために、しかし常に正の整数のために動作します

のJava 7、プリミティブ型の static int compare
+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と整数。 – barjak

関連する問題