commons-lang3 元组使用
2023-12-06 本文已影响0人
Tinyspot
1. org.apache.commons.lang3.tuple 包
1.1 抽象类 Pair (二元组)
- Pair 是抽象类,不可直接实例化,通过 Pair.of(L,R) 实例化
- Pair 只放一组 key/value,在接口需返回两个值时比较适用
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();
}
}
![](https://img.haomeiwen.com/i20154612/9614ca42a9275282.png)
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);
}
}
![](https://img.haomeiwen.com/i20154612/4614fdde25b31c8e.png)
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);
}