java中的tuple实现
java中没有类似c#、scala中的tuple元组类,只能自己动手,丰衣足食了,见下面的代码:
Tuple 抽象类
import java.util.Optional; /**
* Tuple元组类
*
* @since: 12/4/15.
* @author: http://yjmyzz.cnblogs.com/
*/
public abstract class Tuple { public abstract <A> Optional<A> _1(); public abstract <B> Optional<B> _2(); public abstract <C> Optional<C> _3(); public abstract <D> Optional<D> _4(); public abstract <E> Optional<E> _5(); 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 <A, B, C, D> Tuple of(A a, B b, C c, D d) {
return new Tuple4(a, b, c, d);
} public static <A, B, C, D, E> Tuple of(A a, B b, C c, D d, E e) {
return new Tuple5(a, b, c, d, e);
} public static void main(String[] args) {
Tuple t2 = Tuple.of(1, "one");
System.out.println(t2);
System.out.println(t2._1().get() + "," + t2._2().get()); Tuple t3 = Tuple.of(1, "one", "一");
System.out.println(t3);
System.out.println(t3._1().get() + "," + t3._2().get() + "," + t3._3().get()); Tuple t4 = Tuple.of(1, "one", "一", "壹");
System.out.println(t4);
System.out.println(t4._1().get() + "," + t4._2().get() + "," + t4._3().get() + "," + t4._4().get()); Tuple t5 = Tuple.of(1, "one", "一", "壹", "yi");
System.out.println(t5);
System.out.println(t5._1().get() + "," + t5._2().get() + "," + t5._3().get() + "," + t5._4().get() + "," + t5._5().get());
} }
Tuple2
import java.util.Optional;
public class Tuple2<A, B> extends Tuple {
private A a;
private B b;
Tuple2(A a, B b) {
this.a = a;
this.b = b;
}
@Override
public Optional<A> _1() {
return Optional.of(a);
}
@Override
public Optional<B> _2() {
return Optional.of(b);
}
@Override
public <C> Optional<C> _3() {
return Optional.empty();
}
@Override
public <D> Optional<D> _4() {
return Optional.empty();
}
@Override
public <E> Optional<E> _5() {
return Optional.empty();
}
@Override
public String toString() {
return "Tuple2{" +
"a=" + a +
", b=" + b +
'}';
}
}
Tuple3
import java.util.Optional;
public class Tuple3<A, B, C> extends Tuple {
private A a;
private B b;
private C c;
Tuple3(A e, B t, C k) {
this.a = e;
this.b = t;
this.c = k;
}
public Optional<A> _1() {
return Optional.of(a);
}
public Optional<B> _2() {
return Optional.of(b);
}
public Optional<C> _3() {
return Optional.of(c);
}
@Override
public <D> Optional<D> _4() {
return Optional.empty();
}
@Override
public <E> Optional<E> _5() {
return Optional.empty();
}
@Override
public String toString() {
return "Tuple3{" +
"a=" + a +
", b=" + b +
", c=" + c +
'}';
}
}
Tuple4
import java.util.Optional;
public class Tuple4<A, B, C, D> extends Tuple {
private A a;
private B b;
private C c;
private D d;
Tuple4(A a, B b, C c, D d) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
}
public Optional<A> _1() {
return Optional.of(a);
}
public Optional<B> _2() {
return Optional.of(b);
}
public Optional<C> _3() {
return Optional.of(c);
}
public Optional<D> _4() {
return Optional.of(d);
}
@Override
public <E> Optional<E> _5() {
return Optional.empty();
}
@Override
public String toString() {
return "Tuple4{" +
"a=" + a +
", b=" + b +
", c=" + c +
", d=" + d +
'}';
}
}
Tuple5
import java.util.Optional;
public class Tuple5<A, B, C, D, E> extends Tuple {
private A a;
private B b;
private C c;
private D d;
private E e;
Tuple5(A a, B b, C c, D d, E e) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
this.e = e;
}
public Optional<A> _1() {
return Optional.of(a);
}
public Optional<B> _2() {
return Optional.of(b);
}
public Optional<C> _3() {
return Optional.of(c);
}
public Optional<D> _4() {
return Optional.of(d);
}
public Optional<E> _5() {
return Optional.of(e);
}
@Override
public String toString() {
return "Tuple5{" +
"a=" + a +
", b=" + b +
", c=" + c +
", d=" + d +
", e=" + e +
'}';
}
}
5个元素一般情况下够用了,如果觉得不够,按这个套路自行扩展吧。
java中的tuple实现的更多相关文章
- Java 中的泛型详解-Java编程思想
Java中的泛型参考了C++的模板,Java的界限是Java泛型的局限. 2.简单泛型 促成泛型出现最引人注目的一个原因就是为了创造容器类. 首先看一个只能持有单个对象的类,这个类可以明确指定其持有的 ...
- 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结
为什么说JAVA中要慎重使用继承 这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...
- java中的锁
java中有哪些锁 这个问题在我看了一遍<java并发编程>后尽然无法回答,说明自己对于锁的概念了解的不够.于是再次翻看了一下书里的内容,突然有点打开脑门的感觉.看来确实是要学习的最好方式 ...
- java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- java中Action层、Service层和Dao层的功能区分
Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DAO只 ...
- Java中常用集合操作
一.Map 名值对存储的. 常用派生类HashMap类 添加: put(key,value)往集合里添加数据 删除: clear()删除所有 remove(key)清除单个,根据k来找 获取: siz ...
- java中的移位运算符:<<,>>,>>>总结
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >& ...
- 关于Java中进程和线程的详解
一.进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命 周期.它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而 ...
随机推荐
- Maven命令行使用:mvn clean compile(编译)
先把命令行切换到Maven项目的根目录,比如:/d/xxxwork/java/maven-test,然后执行命令: mvn clean compile 执行结果如下: [INFO] Scanning ...
- 通过Laravel 初识Vue.js
最近也在学习laravel的框, 因为之前学过tp框架, 都说laravel是最优雅的框架,所以开学后忍不住去试试这个在国外已经火的不要不要的框架. 总的来说,对于学习完tp框架后,我觉得tp毕竟是中 ...
- 原生HTML5 input type=file按钮UI自定义
原生<input type="file" name="file" />长得太丑 提升一下颜值 实现方案一.设置input[type=file]透明度 ...
- jQuery获取Table-Input控件值封装
- 深入理解和应用display属性(二)
四.inline-block 此类元素是inline + block的合体 1) margin和padding都有效:width和height都有效: .inline{ display: inline ...
- iOS 真机测试 App installation failed
真机测试的过程中,出现这种Bug This application's application-identifier entitlement does not match that of the in ...
- 更改Visual Studio 2015 默认的语言设置
Vs支持多种语言,但有可能创建项目时,默认的开发语言不是你需要的,比如:默认是Visual C++ 你可以通过"工具"----选项----导入和导出设置来修改. 引用: https ...
- SharePoint 2013 定制搜索显示模板(二)
前言 之前一篇博客,简单的介绍了如何定制搜索显示模板,这一次,我们介绍一下如何定制搜索显示时,弹出来的那个页面,相信这个大家也都会遇到的. 1.第一部分就是搜索显示模板的部分,第二部分就是搜索项目详情 ...
- n个元素的入栈顺序有多少种出栈顺序?
问题:w1.w2.w3.w4.w5,5个元素将会按顺序入栈,求出栈顺序有多少种情况. 先写一下结论方便记忆: 1个元素:1种 2个元素:2种 3个元素:5种 4个元素:14种 5个元素:42种 简单的 ...
- Java中 实现多线程成的三种方式(继承,实现,匿名内部类)
---------------------------------------------------------------------------------------------------- ...