scala学习-scala中的元组Tuple概念
1。Tuple的英文意思是元组的意思
2。场景:当在一个方法中, 你需要返回几个对象,这几个对象的类型一致,你可以返回一个数组;如果几个对象的类型不同呢,当然你可以返回一个Object[]数组,可是这样在使用结果数组的时候,就需要强转对象的类型,会导致类型不安全;也可以定义一个dto,当多个场景下需要使用的不同,需要定义多个dto,这样会类爆炸,而且重用率极低;在非常接近Java语言的Scala里有元组的定义:val t = (1, 3.14, “Fred”),就是一个不同类型的数据放到一个线性集合里,在Java里我们可以模拟出一个类似的结构,以适合上面的场景
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); }
}
运行结果如下
hello|1
hello|1|hi
上面的代码中定义了三个类,父类为抽象类Tuple,此父类就是定义了一些模板方法,方法名有点不像Java方法名的命名规范,那是模仿scala里的方法命名,Tuple类没有其他作用,只是提供静态方法,创建Tuple的之类充当容器,提供多个容器的入口;
Tuple2<E,T>可以充当两个对象的容器,该容器内保持两个对象的引用,通过方法_1(), _2()获取第一个和第二个对象的值,在此并没有直接返回对象,而是返回一个Optional对象,这是提醒使用返回值的方法做非Null检查;
Tuple3<E,T,K>原理类似Tuple2,类似的可以做针对4个以及更多的对象容器,作为方法返回参数类型
scala学习-scala中的元组Tuple概念相关推荐
- scala学习-scala读取Hbase表中数据并且做join连接查询
1.业务需求:sparkSQL on hbase ,sparkSQL直接读取Hbase中的两个表,进行连接查询. 2.图示 绿色的线 上图中绿色的线是做过测试的,直接在hive中建表,然后load数据 ...
- scala学习-scala中的特殊符号使用
1.=> 使用 目前知道的基本和匿名函数定义和函数类型声明有关,以及在case语句中的使用 1. 匿名函数定义, 左边是参数 右边是函数实现体 (x: Int)=>{} 2.函数类型的声明 ...
- scala学习-scala中:: , +:, :+, :::, +++的区别
4种操作符的区别和联系 :: 该方法被称为cons,意为构造,向队列的头部追加数据,创造新的列表.用法为 x::list,其中x为加入到头部的元素,无论x是列表与否,它都只将成为新生成列表的第一个元素 ...
- 笨方法“学习python笔记之元组(tuple)
Tuple(元组)是python的基本序列三种类型之一(另外两种是List, Range),是"笨方法"学python3中没有讲到的数据类型,因此专门查了下官方资料,中可以查找到对 ...
- scala学习-scala通过mkString方法把一个集合转化为一个字符串
Problem 如果你想要把集合元素转化为字符串,可能还会添加分隔符,前缀,后缀. Solution 使用mkString方法来打印一个集合内容,下面给一个简单的例子: scala> val a ...
- Scala学习笔记-详细记录学习中遇到的知识点
目录 输入 print输出 变量 数据类型 标识符与关键字 运算符优先级 if else for循环 yield生成器 break与continue 函数 局部函数 惰性lazy 异常 类与对象 构造 ...
- python中元组的概念_python元组的概念与基本操作
元组与列表类似,关于元组同样需要做如下三点: A.概念 1.元组通过英文状态下的圆括号构成"()".其存放元素与列表一样,可以是不通的数值类型,也可以是不通的数据结构. 2.元组仍 ...
- Java元组Tuple
Java中的元组Tuple 文章目录 Java中的元组Tuple 1. 概念 2. 使用 2.1 依赖Jar包 2.2 基本使用 2.2.1 直接调用 2.2.2 自定义工具类 2.2.3 示例代码 ...
- scala学习之scala中一些集合的常用函数
scala学习 集合常用函数 集合的基本属性与常用操作 长度.大小.循环遍历.迭代器.生成字符串.是否有包含等 object TestSetFunction {def main(args: Array ...
最新文章
- 在Ubuntu 14.04 64bit上搭建单机本地节点Spark 1.3.0环境
- linux每日命令,日常整理linux常用命令大全(收藏)
- centos7 安装 python3
- 查看 SQL Server 2000 中数据表所占用的磁盘空间
- 计算机缺少php5.dll,php5isapi.dll 64位
- QT的QQuickView类的使用
- The world at your fingertips — 天涯明月刀幕后(后记)
- [Python]no encoding declared 错误解决方法
- java 防止表单重复提交
- RetroGuard的使用方法(转)
- 太香了!4999元就能入手iPhone 11 最高降价达900元
- mysql 报错注入输出多个字段_SQL注入浅析
- 图标字体Font Awesome 4.7 的引入与使用
- linux磁盘满了怎么转移,linux 磁盘转移空间的方法
- ASP.NET Web Pages:WebGrid 帮助器
- MATLAB实现遥感图像分类——K均值算法
- echarts字体大小自适应
- 计算机 桌面显示桌面图标不见了,显示桌面图标不见了怎么办,小编教你电脑显示桌面图标不见了怎么解决...
- python什么是高阶函数_对于高阶函数的理解是什么?
- Word文件打开的时候需要输入密码?
热门文章
- 瑞幸咖啡首席技术官也离职了:并未参加公司财务造假
- 全球蜂窝基带芯片厂商去年营收209亿美元,华为海思占16%
- 微信iOS 7.0.9版本更新:今天的朋友圈是一片欢乐的海洋!
- 旷视申请赴港IPO:阿里蚂蚁金服持股近30%
- 《人生一串》第二季收官 B站播放量突破5400万
- 新iPhone将采用更大容量电池:最低3110mAh?
- 库克放出拜年视频 来自Apple Park的祝福
- 如何理解Python装饰器?
- anti-wrinkle_anti-wrinkle cream是什么意思
- linux zfs功能,linux – 有没有办法一次设置多个ZFS文件系统属性?