场景:当在一个方法中, 你需要返回几个对象,这几个对象的类型一致,你可以返回一个数组;如果几个对象的类型不同呢,当然你可以返回一个Object[]数组,可是这样在使用结果数组的时候,就需要强转对象的类型,会导致类型不安全;也可以定义一个dto,当多个场景下需要使用的不同,需要定义多个dto,这样会类爆炸,而且重用率极低;在非常接近Java语言的Scala里有元组的定义:val t = (1, 3.14, "Fred"),就是一个不同类型的数据放到一个线性集合里,在Java里我们可以模拟出一个类似的结构,以适合上面的场景
demo:
abstract class Tuple { public static void main (String[] args) { Tuple tuple2 = Tuple.<String, Integer>of("hello", 1); Tuple tuple3 = Tuple.<String, Integer, String>of("hello", 1, "hi"); System.out.println(tuple2._1().get() + "|" + tuple2._2().get()); System.out.println(tuple3._1().get() + "|" + tuple3._2().get() + "|" + tuple3._3().get()); } public static <E, T> Tuple of (E e, T t) { return new Tuple2(e, t); } public static <E, T, K> Tuple of (E e, T t, K k) { return new Tuple3(e, t, k); } public abstract <E> Optional<E> _1 (); public abstract <E> Optional<E> _2 (); public abstract <E> Optional<E> _3 (); } class Tuple2<E, T> extends Tuple { private E e; private T t; Tuple2 (E e, T t) { this.e = e; this.t = t; } @Override public Optional<E> _1 () { return Optional.of(e); } @Override public Optional<T> _2 () { return Optional.of(t); } @Override public <E> Optional<E> _3() { return Optional.absent(); } } class Tuple3<E, T, K> extends Tuple { private E e; private T t; private K k; Tuple3 (E e, T t, K k) { this.e = e; this.t = t; this.k = k; } public Optional<E> _1 () { return Optional.of(e); } public Optional<T> _2 () { return Optional.of(t); } public Optional<K> _3 () { return Optional.of(k); } }
上面的代码中定义了三个类,父类为抽象类Tuple,此父类就是定义了一些模板方法,方法名有点不像Java方法名的命名规范,那是模仿scala里的方法命名,Tuple类没有其他作用,只是提供静态方法,创建Tuple的之类充当容器,提供多个容器的入口;
Tuple2<E,T>可以充当两个对象的容器,该容器内保持两个对象的引用,通过方法_1(), _2()获取第一个和第二个对象的值,在此并没有直接返回对象,而是返回一个Optional对象,这是提醒使用返回值的方法做非Null检查;
Tuple3<E,T,K>原理类似Tuple2,类似的可以做针对4个以及更多的对象容器,作为方法返回参数类型
相关推荐
主要介绍了Java元组类型javatuples使用实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Tuplespace的Java实现。 移动到https://github.com/mike-k-houghton/tuplespace元组是项目的有序列表。 元组空间是一种关联存储器,其中条目,元组存储在该空间中,并使用基于元组的内在属性的搜索条件进行检索。 这...
Objective-C Tuple,OC实现的元组
自己编写的TupleUtil元组工具类,可自行扩展,支持get获取元素
day06回顾 list 列表 in / not in 运算符 索引取值 索引赋值 切片取值 切片赋值 del 语句用于列表 del 变量 ...元组 tuple 元组是不可改变的序列,同list一样,元组可以存放任意类型的元素,一但元
一 元组 元组也是python的一种数据结构。和列表类似也是由一系列...tuple1 = (1, 2, 34, 'java', 'python', 'java') print(tuple1) tuple2 = ("python", True, ) print(tuple2) (1, 2, 34, 'java', 'python', 'java')
java-tuple.zip,元组和一组操纵器Java元组
先来一份完整的爬虫工程师面试考点: 一、 Python 基本功 1、简述Python 的特点和优点 ...列表和元组都是可迭代对象,能够对其进行循环、切片等,但元组 tuple 是不可变的。元组不可变的特性,使得它可以成为字典 Dict
游戏 2048 的 N 元组...N-Tuple Networks for the Game 2048 的时间差分学习,Marcin Szubert 和 Wojciech Jaśkowski,IEEE 计算智能和游戏会议论文集,2014 年 8 月,德国多特蒙德( ) 执照 根据 Apache 许可,版
org.jooq.lambda.tuple 在函数式编程中,元组支持是必不可少的。 可以将各种事物建模为元组,例如函数参数列表。 这就是为什么我们支持类型安全的Tuple1到Tuple16类型的原因。org.jooq.lambda.Seq 实施了新的Streams...
元组 tuple 字面值表示方式 1,2,3 (1,2,3) (1,) 1, tuple() tuple(可迭代对象) 元组的运算: + += * *= < > <= >= != in / not in [] 索引和切片 元组不支持索引和切片赋值 字典 dict 键(key) - 值...
python标准数据类型有Number(数字),String(字符串 ,Boolean(布尔值),List(列表),Tuple(元组),Set(集合),Dictionary(字典) Number、String与Boolean在上一章节我们已详细讲解,这一章我们主要讲解剩下...
数据类型:List(列表)-创建 List(列表)——创建 在 Python 中,创建列表的方法可分为两种。...tuple1 = ('Python', 'Java', 'C++', 'JavaScript') list2 = list(tuple1) print(list2) ['h', 'e', 'l', 'l', 'o']
040.元组_特点_创建的两种方式_tuple()要点 041.元组_元素访问_计数方法_切片操作_成员资格判断_zip() 042.元组_生成器推导式创建元组_总结 043.字典_特点_4种创建方式_普通_dict_zip_formkeys 044.字典_元素的访问_...
这个库的目标是提供一个Tuple类,它可以包含多个元素,并提供一个ShuffleUtils类,为您提供一个易于使用的方法来调整哪些元组元素应该用于分区、排序和分组. 目录 例子 想象一下,您正在 MapReduce 中处理人名。 ...
真正简单的文档几乎映射到 Tuple/TupleEntry 范式。 嵌套文档被转换为 TupleEntry。 因此,假设您有一个带有"name" 、 "age"和"address"的个人文档。 "address"是一个包含字段"street" 、** "city"和"state" 的对象...