`

java Tuple 元组

阅读更多

    场景:当在一个方法中, 你需要返回几个对象,这几个对象的类型一致,你可以返回一个数组;如果几个对象的类型不同呢,当然你可以返回一个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个以及更多的对象容器,作为方法返回参数类型

分享到:
评论
1 楼 zoujinxing 2016-12-20  
无意中学到一种写法:Tuple.<String, Integer>of("hello", 1)
谢谢。

相关推荐

    Java元组类型javatuples使用实例

    Java元组类型javatuples使用实例 Java元组类型javatuples是Java中的一种元组类型,用于存储多个元素的集合。 javatuples框架提供了从1到10个元素的元组类型,包括Unit、Pair、Triplet、Quartet、Quintet、Sextet、...

    测量程序编制 - python 28数据类型:Tuple(元组)-创建.pptx

    在Python编程语言中,元组(Tuple)是一种不可变序列,这意味着一旦创建,就不能更改其内容。元组常用于存储一组有序且不需修改的数据,它们在内存中占用较少的空间,且可以作为字典的键,这是列表所不能做到的。...

    java语言版本的`元组`数据类型,实现了元组类型的特性以及常用操作方法,轻量级,无依赖,线程安全

    在Java编程语言中,元组(Tuple)是一种特殊的数据结构,它允许我们存储多个不同类型的值在一个单一的对象中。在标准库中并没有内置的元组类型,但许多开发者通过自定义类或者第三方库来实现这一功能。在这个场景下...

    Tuple Spaces:元组空间有超时和事务。-开源

    Tuplespace的Java实现。 移动到https://github.com/mike-k-houghton/tuplespace元组是项目的有序列表。 元组空间是一种关联存储器,其中条目,元组存储在该空间中,并使用基于元组的内在属性的搜索条件进行检索。 这...

    自己写的元组工具类,支持get式获取,可扩展

    自己编写的TupleUtil元组工具类,可自行扩展,支持get获取元素

    python基础2day01.txt

    day06回顾 list 列表 in / not in 运算符 索引取值 索引赋值 切片取值 切片赋值 del 语句用于列表 del 变量 ...元组 tuple 元组是不可改变的序列,同list一样,元组可以存放任意类型的元素,一但元

    零基础入门python3.7 ——基础知识总结(五)元组(tuple)

    tuple1[6][0] = 'java' # 这里修改的是列表元素,而不是元组元素 print(tuple1) ``` 在上述例子中,尽管看起来元组的最后一个元素改变了,实际上元组并没有变,因为它的最后一个元素是一个列表,列表是可以修改的。...

    python中的list、tuple、set、dict用法简析.doc

    Python 是一种高级的编程语言,它提供了多种数据结构,包括列表(List)、元组(Tuple)、集合(Set)和字典(Dict)。这些数据结构可以用来存储和处理数据,本文将详细介绍它们的用法和特点。 List(列表) List ...

    搞定这套Python爬虫面试题(面试会so easy)

    先来一份完整的爬虫工程师面试考点: 一、 Python 基本功 1、简述Python 的特点和优点 ...列表和元组都是可迭代对象,能够对其进行循环、切片等,但元组 tuple 是不可变的。元组不可变的特性,使得它可以成为字典 Dict

    wss-agent-api-client-2.0.0.zip

    描述 "java-tuple.zip,元组和一组操纵器Java元组" 指出这是一个关于Java元组的项目,可能是一个开源库,提供了对Java标准库中缺失的元组支持。元组是一种可以存储多个不同类型的值的数据结构,通常用于临时存储一组...

    Basic-Python-Tuple-Parser

    8. 在Java中模拟Python元组:如果涉及Java部分,会介绍如何在Java中实现类似元组的概念,如使用`Pair`类或其他容器。 通过这个项目,无论是Python新手还是有经验的开发者,都能深入理解和应用Python元组,同时可能...

    行业分类-设备装置-在消息中传送元组.zip

    元组(Tuple)作为一种数据结构,通常包含多个元素,每个元素可以有不同的数据类型,它在消息传递中扮演着关键角色。 1. **元组的概念**: 元组是一种有序的数据集合,它可以包含任意数量的元素,每个元素都有自己...

    python中的列表与元组的使用

    元组(Tuple)是另一种序列类型的数据结构,与列表不同的是,元组是不可变的。创建元组使用圆括号(),并同样用逗号分隔元素,例如:tuple = (ele1, ele2, ...)。由于元组不可变,所以不能直接对其元素进行增删改操作...

    Storm中spout和bolt之间发送和接收数据的java源代码实例

    总的来说,Apache Storm的Spout和Bolt通过元组在Java中进行数据交互,Spout生成数据流,Bolt接收并处理这些数据。理解这些概念以及如何在实际代码中实现它们对于构建高效、可靠的实时数据处理系统至关重要。

    TupleSpace-开源

    5. **查询元组**:`read`方法与`take`类似,但它不会移除元组,而是返回一个匹配元组的列表,例如:`List&lt;Tuple&gt; results = tupleSpace.read(new Tuple("key", Query.MATCH_ALL))`。 6. **超时操作**:`take`和`...

    SkySpace:分布式元组空间的实现。 支持 Java 和 Python

    对于 Java 开发者,SkySpace 提供了一套完整的 Java SDK,其中包括了丰富的类和接口,如 TupleSpace(元组空间接口)、ReadWriteLock(读写锁机制)以及各类操作方法(如 put、take、read 等)。这些类和接口使得...

    基于Java教你如何半小时搞定python基础

    此外,Python还有列表(list)、元组(tuple)、集合(set)和字典(dict)等复合数据类型,它们分别对应Java的ArrayList、数组、HashSet和HashMap。 在Python中,函数定义使用`def`关键字,函数可以作为返回值,...

    2048:游戏 2048 的 N 元组网络

    游戏 2048 的 N 元组...N-Tuple Networks for the Game 2048 的时间差分学习,Marcin Szubert 和 Wojciech Jaśkowski,IEEE 计算智能和游戏会议论文集,2014 年 8 月,德国多特蒙德( ) 执照 根据 Apache 许可,版

    有java基础快速学Python摘要

    Python有五大标准数据类型:Numbers(数字),String(字符串),List(列表),Tuple(元组)和Dictionary(字典)。Python的数据类型是动态的,不像Java那样需要提前声明。 - **赋值**:在Python中,可以同时给...

Global site tag (gtag.js) - Google Analytics