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

com.anwen.mongo.model.Pair Maven / Gradle / Ivy

There is a newer version: 2.1.6.1
Show newest version
package com.anwen.mongo.model;

import com.anwen.mongo.toolkit.builder.CompareToBuilder;

import java.io.Serializable;
import java.util.Map;
import java.util.Objects;

/**
 * 由两个元素组成的一对。
 * 这个类是定义基本API的抽象实现。它将元素称为“左”和“右”。它还实现了Map。输入接口,其中键为“left”,值为“right”。
 * 子类实现可以是可变的,也可以是不可变的。然而,对可以存储的存储对象的类型没有限制。如果可变对象存储在对中,那么对本身实际上就是可变的。
 * @author JiaChaoYang
 **/
public abstract class Pair implements Map.Entry, Comparable>, Serializable {


    private static final long serialVersionUID = 5257775966081801053L;

    /**
     * 从两个推断泛型类型的对象中获得一对不可变的。
     * 这个工厂允许使用推理来创建对,以获得泛型类型
     * @author JiaChaoYang
     * @date 2024/3/16 22:48
    */
    public static  Pair of(final L left, final R right) {
        return new MutablePair<>(left, right);
    }

    /**
     * 从该对中获取左侧元素
     * @author JiaChaoYang
     * @date 2024/3/16 22:47
    */
    public abstract L getLeft();

    /**
     * 从这对中获取右侧元素
     * @author JiaChaoYang
     * @date 2024/3/16 22:47
    */
    public abstract R getRight();

    /**
     * 从这对中获取KEY。
     * @author JiaChaoYang
     * @date 2024/3/16 22:47
    */
    @Override
    public final L getKey() {
        return getLeft();
    }

    /**
     * 从该对中获取值
     * @author JiaChaoYang
     * @date 2024/3/16 22:47
    */
    @Override
    public R getValue() {
        return getRight();
    }

    /**
     * 比较基于左元素和右元素的对。类型必须是可比较的。
     * @author JiaChaoYang
     * @date 2024/3/16 22:47
    */
    @Override
    public int compareTo(final Pair other) {
        return new CompareToBuilder().append(getLeft(), other.getLeft())
                .append(getRight(), other.getRight()).toComparison();
    }

    /**
     * 根据这两个元素将此对与另一对进行比较。
     * @author JiaChaoYang
     * @date 2024/3/16 22:46
    */
    @Override
    public boolean equals(final Object obj) {
        if (obj == this) {
            return true;
        }
        if (obj instanceof Map.Entry) {
            final Map.Entry other = (Map.Entry) obj;
            return Objects.equals(getKey(), other.getKey())
                    && Objects.equals(getValue(), other.getValue());
        }
        return false;
    }

    /**
     * 返回合适的哈希代码。哈希代码遵循Map中的定义
     * @author JiaChaoYang
     * @date 2024/3/16 22:52
    */
    @Override
    public int hashCode() {
        // see Map.Entry API specification
        return (getKey() == null ? 0 : getKey().hashCode()) ^
                (getValue() == null ? 0 : getValue().hashCode());
    }

    /**
     * 使用格式($left,$right)返回此对的字符串表示形式
     * @author JiaChaoYang
     * @date 2024/3/16 22:52
    */
    @Override
    public String toString() {
        return new StringBuilder().append('(').append(getLeft()).append(',').append(getRight()).append(')').toString();
    }

    /**
     * 使用给定的格式格式化接收器。
     * 这使用java.util。Formattable以执行格式化。可以使用两个变量来嵌入左元素和右元素。将%1$s用于左侧元素(键),将%2$s用于右侧元素(值)。toString()使用的默认格式是(%1$s,%2$s)。
     * @author JiaChaoYang
     * @date 2024/3/16 22:52
    */
    public String toString(final String format) {
        return String.format(format, getLeft(), getRight());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy