Is there a library to compare primitive type values?
سؤال
I am implementing Comparable
interface on a trivial class that wraps a single int
member.
I can implement it this way:
@Override
public int compareTo ( final MyType o )
{
return
Integer.valueOf( this.intVal ).compareTo(
Integer.valueOf( o.intVal )
);
}
But this (maybe) creates 2 totally unnecessary Integer objects.
Or I can go tried and true cut-and-paste approach from Integer class:
@Override
public int compareTo ( final MyType o )
{
int thisVal = this.intValue;
int anotherVal = o.intValue;
return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1));
}
This is pretty efficient, but duplicates code unnecessary.
Is there a library that would implement this missing Integer
( and Double and Float ) method?
public static int compare ( int v1, int v2 );
المحلول 2
In Java 7, static int compare
for primitive types have been added to all primitive object wrapper classes, i.e there is now:
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...
نصائح أخرى
- For
int
, write your owncompare
method (it requires at most three lines of code). - For
double
, useDouble.compare
(not to be confused withcompareTo
). - For
float
, useFloat.compare
.
The last two take primitive types and thus avoid boxing and unboxing. I can see an argument for Integer
providing a similar compare
method, but as things stand it doesn't.
Maybe, I'm missing something, but IMHO this is a weird question.
Is there a library that would implement this missing
Integer
( and Double and Float ) method?public static int compare ( int v1, int v2 );
Well, I think this does the job:
public static int compare ( int v1, int v2 )
{
if (v1 < v2) return -1;
if (v1 > v2) return 1;
return 0;
}
This solution is simple, but perhaps simplistic:
public static int compare ( int v1, int v2 )
{
return v1 - v2;
}
Note: @aix is correct! This approach will not work for arbitrary integers. It will work for always-positive integers though, for example auto generated database keys etc