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中进程和线程的详解
一.进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命 周期.它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而 ...
随机推荐
- 15、ASP.NET MVC入门到精通——MVC-路由
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 Routing(路由) – URL url 作为广泛使用的Web用户接口,需要被重视 好的Url应该满足如下条件: URL应为获取某种资源提 ...
- C#综合揭秘——通过修改注册表建立Windows自定义协议
引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...
- hadoop基本命令
1,hadoop job -list 列出Jobtracer上所有的作业 2,hadoop job -kill 任务 杀掉hadoop正在运行的任务 3,hadoop fs ...
- 使用Enyim.Caching访问阿里云的OCS
阿里云的开放式分布式缓存(OCS)简化了缓存的运维管理,使用起来很方便,官方推荐的.NET访问客户端类库为 Enyim.Caching,下面对此做一个封装. 首先引用最新版本 Enyim.Cachin ...
- discuz 3.x 核心文件class_core.php解析
class_core.php是discuz 3.x的核心文件,几乎所有PHP脚本都有引用此文件初始化论坛运行环境.以下解析引用3.2版discuz. line 12-15:常量定义IN_DISCUZ: ...
- 偷偷发请求的ajax
概述 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作需要 ...
- jquery简介和实例
一.简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库. 参考:http://www.php100 ...
- Android Touch事件传递机制 一: OnTouch,OnItemClick(监听器),dispatchTouchEvent(伪生命周期)
ViewGroup View Activity dispatchTouchEvent 有 有 有 onInterceptTouchEvent 有 无 无 onTouchEvent 有 有 有 例 ...
- html中select标签根据枚举获得值的总结
不知不觉在公司一个多月了,这一个月做了一个支票申请的web页面功能,都不是特别难,审核有公司给的工作流,分页工具和很多公用工具公司也都给了,所以觉得难度都不是很大.今天主管让我们修改了以前做的项目的代 ...
- UITabBarController 更改tabbariteam上的选中图片
首先遵守“ UITabBarControllerDelegate ”协议 再在- (void)viewDidLoad {}方法中设置代理“ self.tabBarController.delegate ...