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中进程和线程的详解
一.进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命 周期.它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而 ...
随机推荐
- 基于SSH框架的学生公寓管理系统的质量属性
系统名称:学生公寓管理系统 首先介绍一下学生公寓管理系统,在学生公寓管理方面,针对学生有关住宿信息问题进行管理,学生公寓管理系统主要包含了1)学生信息记录:包括学号.姓名.性别.院系.班级:2)住宿信 ...
- div盒子垂直水平居中
div盒子,水平垂直居中. <!DOCTYPE html><html> <head> <meta charset="utf-8"> ...
- Javascript中prototype属性详解
在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...
- JavaScript中this指向的简单理解
首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ...
- Emacs学习心得之 LaTeX编辑
目录 1. 前言 2. texlive的安装 3. AUCTEX的安装和配置 4. RefTEX的安装和配置 一.前言 本篇博文记录了Emacs下LaTeX编辑环境的搭建,参考一下文章: http:/ ...
- Android 一个对sharedpreferences 数据进行加密的开源库
1.项目地址 https://github.com/iamMehedi/Secured-Preference-Store 2.使用方法 2.1.存数据 //存数据 SecuredPreferenceS ...
- 设置导航栏nav全透明
设置导航栏nav全透明 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #ffffff } span.s1 { } ...
- Android app被系统kill的场景
何时发生 当我们的app被切到后台的时候,比如用户按下了home键或者切换到了别的应用,总之是我们的app不再和用户交互了,这个时候对于我们的app来说就是什么事情都可能发生的时候了,因为系统会认为你 ...
- AndroidStudio配置gradle,让App自动签名
最近开发关于微信一系列功能,发现分享.支付必须要打包签名才能测试,太耽误事了,耗时耗力...在网上扒拉扒拉资料,发现有很多前辈都处理过类似问题,非常感谢大家的分享,参考链接:http://blog.c ...
- iOS开发new与alloc/init的区别
[className new]基本等同于[[className alloc] init]: 区别只在于alloc分配内存的时候使用了zone. 这个zone是个什么东东呢? 它是给对象分配内存的时候, ...