📄 numbercomparator.java
字号:
package com.reddragon2046.base.utilities.data.predicates;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Comparator;
public class NumberComparator
implements Comparator
{
public NumberComparator()
{
mode = java.lang.Integer.class;
}
public NumberComparator(Class discriminator)
{
if(!(java.lang.Number.class).isAssignableFrom(discriminator))
{
throw new IllegalArgumentException("discriminator must be a known subclass of java.lang.Number");
} else
{
mode = discriminator;
return;
}
}
public Class discriminator()
{
return mode;
}
public int compare(Object first, Object second)
{
Number n1 = (Number)first;
Number n2 = (Number)second;
if(mode.equals(java.lang.Integer.class))
return n1.intValue() - n2.intValue();
if(mode.equals(java.lang.Byte.class))
return n1.byteValue() - n2.byteValue();
if(mode.equals(java.lang.Short.class))
return n1.shortValue() - n2.shortValue();
if(mode.equals(java.lang.Long.class))
{
long r = n1.longValue() - n2.longValue();
if(r < 0xffffffff80000000L)
return 0x80000000;
if(r > 0x7fffffffL)
return 0x7fffffff;
else
return (int)r;
}
if(mode.equals(java.lang.Float.class))
{
float r = n1.floatValue() - n2.floatValue();
int i = (int)r;
if(i != 0 || r == 0.0F)
return i;
else
return r >= 0.0F ? 1 : -1;
}
if(mode.equals(java.lang.Double.class))
{
double r = n1.doubleValue() - n2.doubleValue();
int i = (int)r;
if(i != 0 || r == 0.0D)
return i;
else
return r >= 0.0D ? 1 : -1;
}
if(mode.equals(java.math.BigInteger.class))
return asBigInteger(n1).compareTo(asBigInteger(n2));
if(mode.equals(java.math.BigDecimal.class))
return asBigDecimal(n1).compareTo(asBigDecimal(n2));
else
throw new IllegalArgumentException("unknown subclass of java.lang.Number: " + mode.getClass());
}
static BigDecimal asBigDecimal(Number n)
{
return (n instanceof BigDecimal) ? (BigDecimal)n : new BigDecimal(n.toString());
}
static BigInteger asBigInteger(Number n)
{
return (n instanceof BigInteger) ? (BigInteger)n : asBigDecimal(n).toBigInteger();
}
private Class mode;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -