package com.github.pfichtner.jrunalyser.base.comparator; import java.math.BigDecimal; import java.util.Comparator; public class AbsDiffNumberComparator implements Comparator<Number> { // TODO negative maxDiffs!? private final BigDecimal maxDiff; public AbsDiffNumberComparator(int maxDiff) { this(new BigDecimal(maxDiff)); } public AbsDiffNumberComparator(BigDecimal maxDiff) { this.maxDiff = maxDiff; } @Override public int compare(Number n1, Number n2) { BigDecimal bd1 = new BigDecimal(String.valueOf(n1)); BigDecimal bd2 = new BigDecimal(String.valueOf(n2)); return bd1.subtract(bd2).abs().compareTo(this.maxDiff) <= 0 ? 0 : bd1 .compareTo(bd2); } @Override public String toString() { return "AbsDiffNumberComparator [maxDiff=" + this.maxDiff + "]"; } }