List of usage examples for org.apache.commons.lang.math FloatRange overlapsRange
public boolean overlapsRange(Range range)
Tests whether the specified range overlaps with this range using float comparison.
null is handled and returns false.
From source file:au.org.ala.delta.model.DiffUtils.java
private static boolean doCompareRealForTaxa(List<RealAttribute> attrs, boolean matchUnknowns, boolean matchInapplicables, MatchType matchType) { // sort attributes in ascending order according to range length Map<Attribute, Double> attrRangeLengths = new HashMap<Attribute, Double>(); for (RealAttribute attr : attrs) { FloatRange range = attr.getPresentRange(); attrRangeLengths.put(attr, (double) (range.getMaximumFloat() - range.getMinimumFloat())); }/*from ww w. j a va2 s.co m*/ Collections.sort(attrs, new AttributeValueSizeComparator(attrRangeLengths)); if (matchType == MatchType.EXACT || matchType == MatchType.SUBSET) { boolean diff = false; for (int i = 0; i < attrs.size() - 1; i++) { RealAttribute a1 = attrs.get(i); RealAttribute a2 = attrs.get(i + 1); diff = !compareReal(a1, a2, matchUnknowns, matchInapplicables, matchType); if (diff) { break; } } return !diff; } else { // overlap - taxa must have at least one point in common // progressively calculate area of overlap int numAttrs = attrs.size(); for (int i = 0; i < numAttrs; i++) { RealAttribute a1 = attrs.get(i); FloatRange a1Range = a1.getPresentRange(); for (int j = i + 1; j < numAttrs; j++) { boolean overlap = false; RealAttribute a2 = attrs.get(j); FloatRange a2Range = a2.getPresentRange(); overlap = a2Range.overlapsRange(a1Range); if (!overlap) { return false; } } } return true; } }
From source file:au.org.ala.delta.model.DiffUtils.java
private static boolean doCompareRange(FloatRange attr1Range, FloatRange attr2Range, boolean attr1Unknown, boolean attr2Unknown, boolean attr1Inapplicable, boolean attr2Inapplicable, boolean matchUnknowns, boolean matchInapplicables, MatchType matchType) { // If both attributes are unknown or inapplicable this is considered a // match. Otherwise, the return value depends on setting for // matchInapplicable or matchUnknown. if ((attr1Unknown || attr1Inapplicable) && (attr2Unknown || attr2Inapplicable)) { return true; }//from w w w .j a v a2 s. co m if ((attr1Unknown && attr1Inapplicable) || (attr2Unknown && attr2Inapplicable)) { return matchInapplicables; } if ((attr1Unknown && !attr1Inapplicable) || (attr2Unknown && !attr2Inapplicable)) { return matchUnknowns; } boolean match = false; switch (matchType) { case EXACT: match = attr1Range.equals(attr2Range); break; case SUBSET: // is the first a subset of the second match = attr2Range.containsRange(attr1Range); break; case OVERLAP: match = attr1Range.overlapsRange(attr2Range); break; default: throw new RuntimeException(String.format("Unrecognized match type %s", matchType.toString())); } return match; }