Java でTupleが欲しい時、、、

https://blogs.oracle.com/otnjp/post/records-come-to-java-ja
Java14 で導入された「レコード」の性質が名前付きタプルの側面を持っていることを考えると
せめて Java11 にTuple が作れるようになっていて欲しかった。

Lombok で、システム内で作るしかないのか。。。

Lombokアノテーション @Value が以下 Lombokアノテーションを効果があることを利用して
  @Getter
  @ToString
  @EqualsAndHashCode
  @AllArgsConstructor

総称型 A, B のタプルに相当するクラスを宣言

import lombok.Data;
import lombok.Value;

@Data(staticConstructor="of")
@Value
public class Pair<A, B>{
    private A left;
    private B right;
}

staticConstructor を @Data で指定して of メソッドでインスタンスを生成します。

Pair<String, Integer> p = Pair.of("ABC", 24);

System.out.println("left = " + p.getLeft() + " right = " + p.getRight() + "  " + p.toString());
left = ABC right = 24  Pair(left=ABC, right=24)

@Builder を使えば、型またはフィールド変数が多い時
  ofメソッドで値を並べるのも誤ったコードを書くことを回避できる。

import lombok.Builder;
import lombok.Value;
import lombok.experimental.Accessors;

@Value
@Accessors(fluent=true)
@Builder
public final class Pair<A, B>{
    private A left;
    private B right;
}
Pair<String, Integer> p = Pair.<String, Integer>builder()
                         .left("ABC")
                         .right(24)
                         .build();

System.out.println("left = " + p.left() + " right = " + p.right() + "  " + p.toString());

フィールド名そのものをgetterメソッドが厭であるなら、
@Accessors(fluent=false) にすれば、
getterメソッド、"get" + フィールド名(先頭大文字)でなくてはならなくなる

System.out.println("left = " + p.getLeft() + " right = " + p.getRight() + "  " + p.toString());