JAVA は、Pair 抽象クラスについて簡単に説明します

1. ビジネスシナリオ ビジネス
開発では、2 つのパラメーター値が返される状況に遭遇しますが、どちらのパラメーター値も役立つため、通常はキーと値のカプセル化にマップ コレクションを使用するか、2 つのプロパティをカプセル化するクラスを作成します。戻るには、もう 1 つの方法は、org.apache.commons.lang3.tuple パッケージで提供されている、よりエレガントで美しい、Pair 抽象クラスを使用することです。

2.Pair は単純に
、Pair 抽象クラスを使用しますが、直接インスタンス化することはできませんが、getLeft() メソッドと getRight() メソッドを提供する、Pair.of(L,R) を通じてインスタンス化できます。

ペア、トリプル
org.apache.commons.lang3 は、複数の値を返すためのツール クラスを提供します。2 つの値を返すにはペアを使用し、3 つの値を返すにはトリプルを使用します。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

cn.hutool.core.lang パッケージは、Pair 用のツールキットも提供します。

<dependency>
	<groupId>cn.hutool</groupId>
	<artifactId>hutool-all</artifactId>
	<version>5.5.3</version>
</dependency>
  List<String> list = Lists.newArrayList();
        list.add("key-value");
        boolean bool = true;
        Pair<Boolean, List<String>> pair = Pair.of(bool, list);
        System.out.println(pair.getLeft());
        System.out.println(pair.getRight());
        System.out.println(pair.getKey());
        System.out.println(pair.getValue());

出力結果:

true
[key-value]
true
[key-value]

注:
lists.newarraylist()

List<Integer> list = new ArrayList<Integer>();
List<Integer> list = Lists.newArrayList();

Lists.newArrayList() は、実際には new ArrayList() とほぼ同じです。これが行う唯一のことは (実際には javac が代わりに行います)、山かっこ内のデータ型を (「反転」ではなく) 自動的に推定することです。Lists もツール クラスであり、Maps もツール クラスであり、このように使用することもできます。

Map<String,Object> map = Maps.newHashMap();

3. ソース コード これには
、それぞれ変更可能と不変更のペアを表す 2 つのサブクラスがあります: ImmutablePair と MutablePair。3 つはすべて、キー/値、セッター メソッド、ゲッター メソッド、getLeft() メソッド、getRight() メソッドへのアクセスを実装します。

package org.apache.commons.lang3.tuple;

import java.io.Serializable;
import java.util.Objects;
import java.util.Map.Entry;
import org.apache.commons.lang3.builder.CompareToBuilder;

public abstract class Pair<L, R> implements Entry<L, R>, Comparable<Pair<L, R>>, Serializable {
    
    
    private static final long serialVersionUID = 4954918890077093841L;

    public Pair() {
    
    
    }
    // 默认用的是子类ImmutablePair,
    public static <L, R> Pair<L, R> of(L left, R right) {
    
    
        return new ImmutablePair(left, right);
    }
    // 定义了抽象方法,目的子类去实现
    public abstract L getLeft();
    // 定义了抽象方法,目的子类去实现
    public abstract R getRight();
    // 这里的获取key其实就是获取getLeft()方法的值
    public final L getKey() {
    
    
        return this.getLeft();
    }
    // 这里的获取value  其实就是获取getRight()方法的值
    public R getValue() {
    
    
        return this.getRight();
    }
    // 这里就是比较两个Pair
    public int compareTo(Pair<L, R> other) {
    
    
        return (new CompareToBuilder()).append(this.getLeft(), other.getLeft()).append(this.getRight(), other.getRight()).toComparison();
    }

    public boolean equals(Object obj) {
    
    
        if (obj == this) {
    
    
            return true;
        } else if (!(obj instanceof Entry)) {
    
    
            return false;
        } else {
    
    
            Entry<?, ?> other = (Entry)obj;
            return Objects.equals(this.getKey(), other.getKey()) && Objects.equals(this.getValue(), other.getValue());
        }
    }

    public int hashCode() {
    
    
        return (this.getKey() == null ? 0 : this.getKey().hashCode()) ^ (this.getValue() == null ? 0 : this.getValue().hashCode());
    }

    public String toString() {
    
    
        return "(" + this.getLeft() + ',' + this.getRight() + ')';
    }

    public String toString(String format) {
    
    
        return String.format(format, this.getLeft(), this.getRight());
    }
}

Par クラスの getLeft() および getRight() メソッドは、サブクラスによって実装されます。親クラスは、デフォルトで ImmutablePair サブクラスを使用します。Pair は Entry<L, R> も実装し、getKey() および getValue() を使用できます。実際、これらはすべて getLeft() メソッドと getRight() メソッドを呼び出し、Comparable を継承し、2 つのペアを比較できます。Serializable を継承し、シリアル化することができます。

4. その他のタプルメソッドは
、クラス定義の Triple クラス、抽象クラス Triple<L, M, R> にあります。これは 3 つのジェネリック型を定義し、ImmutableTriple と MutableTriple の不変実装クラスと可変実装クラスのペアも提供します。

vavr ライブラリ、Tuple1 ~ Tuple8、8 つのタプルをサポート

Guess you like

Origin blog.csdn.net/weixin_45817985/article/details/133343284