⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 numbercomparator.java

📁 java 的源代码
💻 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 + -