Java实现好用的Tuple

package tupleDemo;

import java.util.Optional;

public abstract class Tuple {
    //<A>:声明此方法为泛型方法,该方法持有一个类型A
    //这里使用Optional是为了提醒使用返回值的方法做非Null检查
    public abstract <A> Optional<A> _1();

    public abstract <B> Optional<B> _2();

    public abstract <C> Optional<C> _3();
    //.....

    public static <A, B> Tuple of(A a, B b) {
        return new Tuple2(a, b);
    }

    public static <A, B, C> Tuple of(A a, B b, C c) {
        return new Tuple3(a, b, c);
    }
    //....

    public static void main(String[] args) {
        Tuple2<String, Integer> tuple2 = new Tuple2<>("hello", 1);
        Tuple2<String, Integer> tupleNull =new Tuple2<>();
        System.out.println(tuple2._1().orElse("notKnow")+" "+tuple2._2().orElse(0));
        Tuple3<Integer, String, Tuple2<String, Integer>> tuple3 = new Tuple3<>(1, null, tuple2);
        System.out.println(tuple3._1().orElse(0)
                +" "+tuple3._2().orElse("notKnow")
                +" "+tuple3._3().get()._1().get());
    }
}
class Tuple2<A,B> extends Tuple{

    private A a;
    private B b;

    public Tuple2() {
    }

    public Tuple2(A a, B b) {
        this.a = a;
        this.b = b;
    }

    @Override
    public Optional<A> _1() {
        return Optional.ofNullable(a);
    }

    @Override
    public Optional<B> _2() {
        return Optional.ofNullable(b);
    }

    @Override
    public <C> Optional<C> _3() {
        return Optional.empty();
    }

    @Override
    public String toString() {
        return "Tuple2{" +
                "a=" + a +
                ", b=" + b +
                '}';
    }
}
class Tuple3<A,B,C> extends Tuple{

    private A a;
    private B b;
    private C c;

    public Tuple3(A a, B b, C c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    @Override
    public  Optional<A> _1() {
        return Optional.ofNullable(a);
    }

    @Override
    public  Optional<B> _2() {
        return Optional.ofNullable(b);
    }

    @Override
    public  Optional<C> _3() {
        return Optional.ofNullable(c);
    }

    @Override
    public String toString() {
        return "Tuple3{" +
                "a=" + a +
                ", b=" + b +
                ", c=" + c +
                '}';
    }
}

如果3个元素还不能满足你,那么按照这个套路,就可以自定义tuple4,、tuple5、..tupleN了!

猜你喜欢

转载自blog.csdn.net/ln1593570p/article/details/84196978