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中进程和线程的详解
一.进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命 周期.它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而 ...
随机推荐
- Lind.DDD.Messaging框架通讯组件介绍
回到目录 大 家好,今天有时间来介绍一下Lind.DDD框架里的消息机制,消息发送这块一般的实现方法是将Email,SMS等集成到一个公用类库里,而本身 Email和SMS没什么关系,它们也不会有什么 ...
- [转]看部电影,透透彻彻理解IoC(你没有理由再迷惑!)
之前对依赖注入的概念一直感到模糊,直到看了这篇文章:http://www.iteye.com/topic/1122835 引述: IoC(控制反转:Inverse of Control)是Spring ...
- Java基础知识回顾
Java回顾之I/O Java回顾之网络通信 Java回顾之多线程 Java回顾之多线程同步 Java回顾之集合 Java回顾之序列化 Java回顾之反射 Java回顾之一些基础概念 Java回顾之J ...
- webpack CommonsChunkPlugin详细教程
1.demo结构: 2.package.json配置: { "name": "webpack-simple-demo", "version" ...
- jquery编写插件的方法
版权声明:作者原创,转载请注明出处! 编写插件的两种方式: 1.类级别开发插件(1%) 2.对象级别开发(99%) 类级别的静态开发就是给jquery添加静态方法,三种方式 1.添加新的全局函数 2 ...
- arcgis for flex全国地图天气预报的具体实现过程解析
系统架构是B/S,开发语言是flex,开发工具是myeclise或者flashbuild,通过调用百度提供的在线天气预报web api接口的方式来实现. 采用地图是ArcGIS全国地图,开发接口为ar ...
- Android开发的小技巧,在Android Studio中使用Designtime Layout Attributes
在编写xml文件时,为了预览效果,经常会使用默认填上一些内容,比如TextView时,随便写上一个text <TextView ... android:text="Name:" ...
- iOS 动画绘制线条颜色渐变的折线图
效果图 .................... 概述 现状 折线图的应用比较广泛,为了增强用户体验,很多应用中都嵌入了折线图.折线图可以更加直观的表示数据的变化.网络上有很多绘制折线图的demo,有 ...
- ORACLE NUMBER类型Scale为0引发的问题
今天遇到了一个很有意思的NUMBER类型Scale引发的问题,我用一个简单的测试用例来展示一下这个案例.假如有个TEST的表,有个字段类型为NUMBER,我插入下面两条数据 CREATE TABLE ...
- Activemq Jolokia
打开JMX <broker … useJmx="true"> … <managementContext> <managementContext cre ...