java中的tuple实现
时间:2022-04-22
本文章向大家介绍java中的tuple实现,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
java中没有类似c#、scala中的tuple元组类,只能自己动手,丰衣足食了,见下面的代码:
Tuple 抽象类
1 import java.util.Optional;
2
3 /**
4 * Tuple元组类
5 *
6 * @since: 12/4/15.
7 * @author: http://yjmyzz.cnblogs.com/
8 */
9 public abstract class Tuple {
10
11 public abstract <A> Optional<A> _1();
12
13 public abstract <B> Optional<B> _2();
14
15 public abstract <C> Optional<C> _3();
16
17 public abstract <D> Optional<D> _4();
18
19 public abstract <E> Optional<E> _5();
20
21 public static <A, B> Tuple of(A a, B b) {
22 return new Tuple2(a, b);
23 }
24
25 public static <A, B, C> Tuple of(A a, B b, C c) {
26 return new Tuple3(a, b, c);
27 }
28
29 public static <A, B, C, D> Tuple of(A a, B b, C c, D d) {
30 return new Tuple4(a, b, c, d);
31 }
32
33 public static <A, B, C, D, E> Tuple of(A a, B b, C c, D d, E e) {
34 return new Tuple5(a, b, c, d, e);
35 }
36
37
38 public static void main(String[] args) {
39 Tuple t2 = Tuple.of(1, "one");
40 System.out.println(t2);
41 System.out.println(t2._1().get() + "," + t2._2().get());
42
43
44 Tuple t3 = Tuple.of(1, "one", "一");
45 System.out.println(t3);
46 System.out.println(t3._1().get() + "," + t3._2().get() + "," + t3._3().get());
47
48
49 Tuple t4 = Tuple.of(1, "one", "一", "壹");
50 System.out.println(t4);
51 System.out.println(t4._1().get() + "," + t4._2().get() + "," + t4._3().get() + "," + t4._4().get());
52
53 Tuple t5 = Tuple.of(1, "one", "一", "壹", "yi");
54 System.out.println(t5);
55 System.out.println(t5._1().get() + "," + t5._2().get() + "," + t5._3().get() + "," + t5._4().get() + "," + t5._5().get());
56 }
57
58 }
Tuple2
1 import java.util.Optional;
2
3 public class Tuple2<A, B> extends Tuple {
4 private A a;
5 private B b;
6
7 Tuple2(A a, B b) {
8 this.a = a;
9 this.b = b;
10 }
11
12 @Override
13 public Optional<A> _1() {
14 return Optional.of(a);
15 }
16
17 @Override
18 public Optional<B> _2() {
19 return Optional.of(b);
20 }
21
22 @Override
23 public <C> Optional<C> _3() {
24 return Optional.empty();
25 }
26
27 @Override
28 public <D> Optional<D> _4() {
29 return Optional.empty();
30 }
31
32 @Override
33 public <E> Optional<E> _5() {
34 return Optional.empty();
35 }
36
37 @Override
38 public String toString() {
39 return "Tuple2{" +
40 "a=" + a +
41 ", b=" + b +
42 '}';
43 }
44 }
Tuple3
1 import java.util.Optional;
2
3 public class Tuple3<A, B, C> extends Tuple {
4 private A a;
5 private B b;
6 private C c;
7
8 Tuple3(A e, B t, C k) {
9 this.a = e;
10 this.b = t;
11 this.c = k;
12 }
13
14 public Optional<A> _1() {
15 return Optional.of(a);
16 }
17
18 public Optional<B> _2() {
19 return Optional.of(b);
20 }
21
22 public Optional<C> _3() {
23 return Optional.of(c);
24 }
25
26 @Override
27 public <D> Optional<D> _4() {
28 return Optional.empty();
29 }
30
31 @Override
32 public <E> Optional<E> _5() {
33 return Optional.empty();
34 }
35
36 @Override
37 public String toString() {
38 return "Tuple3{" +
39 "a=" + a +
40 ", b=" + b +
41 ", c=" + c +
42 '}';
43 }
44 }
Tuple4
1 import java.util.Optional;
2
3 public class Tuple4<A, B, C, D> extends Tuple {
4 private A a;
5 private B b;
6 private C c;
7 private D d;
8
9 Tuple4(A a, B b, C c, D d) {
10 this.a = a;
11 this.b = b;
12 this.c = c;
13 this.d = d;
14 }
15
16 public Optional<A> _1() {
17 return Optional.of(a);
18 }
19
20 public Optional<B> _2() {
21 return Optional.of(b);
22 }
23
24 public Optional<C> _3() {
25 return Optional.of(c);
26 }
27
28 public Optional<D> _4() {
29 return Optional.of(d);
30 }
31
32 @Override
33 public <E> Optional<E> _5() {
34 return Optional.empty();
35 }
36
37 @Override
38 public String toString() {
39 return "Tuple4{" +
40 "a=" + a +
41 ", b=" + b +
42 ", c=" + c +
43 ", d=" + d +
44 '}';
45 }
46 }
Tuple5
1 import java.util.Optional;
2
3 public class Tuple5<A, B, C, D, E> extends Tuple {
4 private A a;
5 private B b;
6 private C c;
7 private D d;
8 private E e;
9
10 Tuple5(A a, B b, C c, D d, E e) {
11 this.a = a;
12 this.b = b;
13 this.c = c;
14 this.d = d;
15 this.e = e;
16 }
17
18 public Optional<A> _1() {
19 return Optional.of(a);
20 }
21
22 public Optional<B> _2() {
23 return Optional.of(b);
24 }
25
26 public Optional<C> _3() {
27 return Optional.of(c);
28 }
29
30 public Optional<D> _4() {
31 return Optional.of(d);
32 }
33
34 public Optional<E> _5() {
35 return Optional.of(e);
36 }
37
38 @Override
39 public String toString() {
40 return "Tuple5{" +
41 "a=" + a +
42 ", b=" + b +
43 ", c=" + c +
44 ", d=" + d +
45 ", e=" + e +
46 '}';
47 }
48 }
5个元素一般情况下够用了,如果觉得不够,按这个套路自行扩展吧。
- 【备忘】Idea的那些事
- 洛谷P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
- win10下vagrant+centos7 rails虚拟开发机配置流程
- 再免费多看一章--k-means++
- 面向对象先导课感想
- 【LATEX】个人版latex论文模板
- 【前端】wangEditor(富文本编辑器) 简易使用示例
- 【前端】ACE Editor(代码编辑器) 简易使用示例
- LOJ#6277. 数列分块入门 1
- 【Ruby on Rails】Model中关于保存之前的原值和修改状态
- 一个很逗的东西——Jd
- SQL Server 数据库清除日志的方法
- 算法模板——平衡树Treap 2
- DTS,DTC, DTB你都认识吗?
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Jenkins时间修改为北京时间
- OpenGL ES for Android 绘制一个点
- OpenGL ES for Android 绘制线
- Jenkins自定义主题
- OpenGL ES for Android 绘制三角形
- Centos7 安装 Tomcat8 的正确姿势 并设置开机自启 实践笔记
- ASP.NET Core 使用 Google 验证码(reCAPTCHA v3)代替传统验证码
- Centos7 安装 Tomcat8 伪集群 的正确姿势 并设置开机自启 实践笔记
- 问题合集,持续更新
- ASP.NET Core Swagger接入使用IdentityServer4 的 WebApi
- 基于IdentityServer4的OIDC实现单点登录(SSO)原理简析
- OpenGL ES 变量、结构体、语句、函数、精度
- OpenGL ES for Android 绘制矩形和正方形
- OpenGL ES for Android 绘制立方体
- 服务化最佳实践