package com.revolsys.comparator; import java.math.BigDecimal; import java.util.Comparator; import com.revolsys.util.number.BigDecimals; public class NumericComparator<T> implements Comparator<T> { public static int nullLastCompare(final Integer number1, final Integer number2) { if (number1 == null) { if (number2 == null) { return 0; } else { return 1; } } else if (number2 == null) { return -1; } else { return number1.compareTo(number2); } } public static int nullLastCompare(final Object value1, final Object value2) { if (value1 == null) { if (value2 == null) { return 0; } else { return 1; } } else if (value2 == null) { return -1; } else { BigDecimal number1 = null; try { number1 = BigDecimals.toValid(value1); } catch (final Exception e) { } BigDecimal number2 = null; try { number2 = BigDecimals.toValid(value2); } catch (final Exception e) { } if (number1 == null) { if (number2 == null) { return value1.toString().compareTo(value2.toString()); } else { return 1; } } else { if (number2 == null) { return -1; } else { return number1.compareTo(number2); } } } } public static int numericCompare(final Object value1, final Object value2) { if (value1 == null) { if (value2 == null) { return 0; } else { return -1; } } else if (value2 == null) { return 1; } else { BigDecimal number1 = null; try { number1 = BigDecimals.toValid(value1); } catch (final Exception e) { } BigDecimal number2 = null; try { number2 = BigDecimals.toValid(value2); } catch (final Exception e) { } if (number1 == null) { if (number2 == null) { return value1.toString().compareTo(value2.toString()); } else { return -1; } } else { if (number2 == null) { return 1; } else { return number1.compareTo(number2); } } } } @Override public int compare(final T value1, final T value2) { return numericCompare(value1, value2); } }