commons-lang3 元组使用

2023-12-06  本文已影响0人  Tinyspot

1. org.apache.commons.lang3.tuple 包

1.1 抽象类 Pair (二元组)

public abstract class Pair<L, R> implements Map.Entry<L, R>, Comparable<Pair<L, R>>, Serializable {

    public static <L, R> Pair<L, R> of(final L left, final R right) {
        return ImmutablePair.of(left, right);
    }

    public final L getKey() {
        return getLeft();
    }

    public R getValue() {
        return getRight();
    }
}
public final class ImmutablePair<L, R> extends Pair<L, R> {
    @Override
    public R setValue(final R value) {
        throw new UnsupportedOperationException();
    }
}

public class MutablePair<L, R> extends Pair<L, R> { 
}

1.2 抽象类 Triple (三元组)

public abstract class Triple<L, M, R> implements Comparable<Triple<L, M, R>>, Serializable {
    public static <L, M, R> Triple<L, M, R> of(final L left, final M middle, final R right) {
        return new ImmutableTriple<>(left, middle, right);
    }
}

2. Pair 示例

2.1 示例

@Test
public void isMutable() {
    // 不可变配对
    Pair pair = new ImmutablePair<>("left", "right");
    // 可变配对
    Pair mutablePair = new MutablePair<>("left", "right");

    // pair.setValue("333"); // java.lang.UnsupportedOperationException
    mutablePair.setValue("111");
    
    // (left,right); (left,111)
    System.out.println(pair + "; " + mutablePair);
}
@Test
public void demo() {
    Pair<String, String> pair = Pair.of("left", "right");
    System.out.println(pair.getKey() + "; " + pair.getLeft());
    System.out.println(pair.getValue() + "; " + pair.getRight());

    // setNull
    Pair<String, String> pair2 = Pair.of(null, null);
    Pair<String, String> pair3 = Pair.of(null, "right");
    Pair<String, String> pair4 = Pair.of("left", null);
    System.out.println(pair2 + "; " + pair3 + "; " + pair4);
}

2.2 结合Map

@Test
public void combineMap() {
    Map<Long, Pair<String, String>> map = new HashMap<>();
    map.put(1001L, Pair.of("left", "right"));

    Map<Pair<String, String>, Boolean> booleanMap = new HashMap<>();
    booleanMap.put(Pair.of("left", "right"), true);
}

3. Triple 示例

@Test
public void triple() {
    Triple<String, String, String> triple = Triple.of("left", "middle", "right");
    System.out.println(triple.getLeft() + "; " + triple.getMiddle() + "; " + triple.getRight());

    Triple<Pair<String, String>, String, List<String>> multiTriple =
            Triple.of(Pair.of("userId", "orderId"), "middle", Lists.newArrayList("right1", "right1"));
    System.out.println(multiTriple);
}
上一篇 下一篇

猜你喜欢

热点阅读