Package net.emaze.dysfunctional.ranges

Source Code of net.emaze.dysfunctional.ranges.RangeComparator

package net.emaze.dysfunctional.ranges;

import java.io.Serializable;
import java.util.Comparator;
import net.emaze.dysfunctional.options.Maybe;
import net.emaze.dysfunctional.order.CompareToBuilder;

/**
* smallest lower bounds with greatest upper bounds ranges come first
*
* @param <T>
* @author rferranti
*/
public class RangeComparator<T> implements Comparator<Range<T>>, Serializable {

    private static final long serialVersionUID = 1l;
    private final Comparator<Maybe<T>> comparator;

    public RangeComparator(Comparator<Maybe<T>> comparator) {
        this.comparator = comparator;
    }

    @Override
    public int compare(Range<T> lhs, Range<T> rhs) {
        return new CompareToBuilder().append(!lhs.iterator().hasNext(), !rhs.iterator().hasNext()).
                append(Maybe.just(lhs.begin()), Maybe.just(rhs.begin()), comparator).
                append(rhs.end(), lhs.end(), comparator).
                toComparison();
    }

    @Override
    public boolean equals(Object rhs) {
        if (rhs instanceof RangeComparator == false) {
            return false;
        }
        final RangeComparator<T> other = (RangeComparator<T>) rhs;
        return this.comparator.equals(other.comparator);
    }

    @Override
    public int hashCode() {
        return comparator.hashCode();
    }
}
TOP

Related Classes of net.emaze.dysfunctional.ranges.RangeComparator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.