All Downloads are FREE. Search and download functionalities are using the official Maven repository.

spring.turbo.util.collection.NulSafeComparator Maven / Gradle / Ivy

package spring.turbo.util.collection;

import org.springframework.lang.Nullable;

import java.util.Comparator;
import java.util.Objects;

/**
 * 对 {@code null} 值友好的比较器
 *
 * @param  泛型
 * @author 应卓
 * @deprecated 使用 {@link Comparator#nullsFirst(Comparator)} 或 {@link Comparator#nullsLast(Comparator)} 替代
 */
@Deprecated
@SuppressWarnings({"rawtypes", "unchecked"})
public class NulSafeComparator implements Comparator {

    private final boolean nullGreater;

    @Nullable
    private final Comparator comparator;

    public NulSafeComparator(boolean nullGreater) {
        this(nullGreater, null);
    }

    public NulSafeComparator(boolean nullGreater, @Nullable Comparator comparator) {
        this.nullGreater = nullGreater;
        this.comparator = (Comparator) comparator;
    }

    @Override
    public int compare(@Nullable T a, @Nullable T b) {
        if (a == b) {
            return 0;
        }
        if (a == null) {
            return nullGreater ? 1 : -1;
        } else if (b == null) {
            return nullGreater ? -1 : 1;
        } else {
            return doCompare(a, b);
        }
    }

    @Override
    public Comparator thenComparing(Comparator other) {
        Objects.requireNonNull(other);
        return new NulSafeComparator<>(nullGreater, comparator == null ? other : comparator.thenComparing(other));
    }

    @Override
    public Comparator reversed() {
        return new NulSafeComparator<>((!nullGreater), comparator == null ? null : comparator.reversed());
    }

    /**
     * 不检查{@code null}的比较方法
* 用户可自行重写此方法自定义比较方式 * * @param a A值 * @param b B值 * @return 比较结果,-1:a小于b,0:相等,1:a大于b */ private int doCompare(T a, T b) { if (null == comparator) { if (a instanceof Comparable && b instanceof Comparable) { return ((Comparable) a).compareTo(b); } return 0; } return comparator.compare(a, b); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy