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 compareT开发者_运维知识库o ( 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 );
- 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.
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...
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
精彩评论