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实现的更多相关文章

  1. Java 中的泛型详解-Java编程思想

    Java中的泛型参考了C++的模板,Java的界限是Java泛型的局限. 2.简单泛型 促成泛型出现最引人注目的一个原因就是为了创造容器类. 首先看一个只能持有单个对象的类,这个类可以明确指定其持有的 ...

  2. 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结

    为什么说JAVA中要慎重使用继承   这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...

  3. java中的锁

    java中有哪些锁 这个问题在我看了一遍<java并发编程>后尽然无法回答,说明自己对于锁的概念了解的不够.于是再次翻看了一下书里的内容,突然有点打开脑门的感觉.看来确实是要学习的最好方式 ...

  4. java中的字符串相关知识整理

    字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...

  5. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  6. java中Action层、Service层和Dao层的功能区分

    Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DAO只 ...

  7. Java中常用集合操作

    一.Map 名值对存储的. 常用派生类HashMap类 添加: put(key,value)往集合里添加数据 删除: clear()删除所有 remove(key)清除单个,根据k来找 获取: siz ...

  8. java中的移位运算符:<<,>>,>>>总结

    java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     右移运算符,num >& ...

  9. 关于Java中进程和线程的详解

    一.进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命 周期.它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而 ...

随机推荐

  1. Hibernate 小阶段总结

    (一)Hibernate入门 通俗的话来说:Hibernate是用于面向对象操控数据库,对JDBC进行轻量级封装.(在java世界中传统的来说是JDBC访问数据库.) 1)Hibernate定性:对象 ...

  2. 向ES6靠齐的Class.js

    写在前面 在2008年的时候,John Resig写了一 Class.js,使用的方式如下: var Person = Class.extend({ init: function(isDancing) ...

  3. 微信小程序开发总结

    一.设计 无需开发者开发的 1.小程序加载动画: 2.页面下拉刷新加载样式: 3.微信控件(拥有完整的操作反馈):如弹出框.通知.模态框...   建议用微信自己的 1.加载.反馈样式(全局.局部) ...

  4. Jquery——简单的视差滚动效果,兼容PC移动端

    $(function(){     $(window).scroll(function(){         var top=$(this).scrollTop();        $(". ...

  5. 又一个高性能轻量级的iOS模型框架YYModel

    前言 iOS的模型框架其实有很多了,去年研究过Mantle,也了解过JSONModel.MJExtension,最近的项目项目优化的时候,再次考虑,基于轻量级.高性能的考虑,最终选择了YYModel. ...

  6. 基于Ruby的watir-webdriver自动化测试方案与实施(四)

    接着基于Ruby的watir-webdriver自动化测试方案与实施(三) http://www.cnblogs.com/Javame/p/4159468.html 继续 ... ...   首先回忆 ...

  7. Windows on Device 项目实践 3 - 火焰报警器制作

    在前两篇<Windows on Device 项目实践 1 - PWM调光灯制作>和<Windows on Device 项目实践 2 - 感光灯制作>中,我们学习了如何利用I ...

  8. ORACLE表空间管理维护

    1:表空间概念 在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段.区.块等逻辑结构.从物理结构上看是放在数据文件中.一个表空间可由多个数据文件组成. 如下图所示, ...

  9. Linux如何查看JDK的安装路径

    如何在一台Linux服务器上查找JDK的安装路径呢? 有那些方法可以查找定位JDK的安装路径?是否有一些局限性呢? 下面总结了一下如何查找JDK安装路径的方法.   1:echo $JAVA_HOME ...

  10. 使用jsonp跨域调用百度js实现搜索框智能提示,并实现鼠标和键盘对弹出框里候选词的操作【附源码】

    项目中常常用到搜索,特别是导航类的网站.自己做关键字搜索不太现实,直接调用百度的是最好的选择.使用jquery.ajax的jsonp方法可以异域调用到百度的js并拿到返回值,当然$.getScript ...