JTuple 1.1.0 正式版发布,让 Java 支持元组数据类型

愚_者
 愚_者
发布于 2017年06月14日
收藏 37

JTuple 1.1.0 正式版发布了,本次更新内容:

1. 调整Tuple1-Tuple4获取元素的方式,更人性化
2. 新增支持将元组转换成Stream
3. 新增Tuple5
4. 完善代码注释以及使用文档

JTuple

Java 语言版本的元组数据类型,实现了元组类型的特性(不可变、 可迭代)以及常用操作方法

轻量级,无依赖,线程安全

元组的意义

元组最重要的意义是用来实现多值返现。 很多时候我们需要返回一组值,更可怕的是这组值的类型可能并不完全一样,比如http请求时,有请求的返回码(int)以及响应报文(String)

对于java人员来说,遇到这种情况时,一般的解决方案是编写一个类,类里只有2个属性,分别是以上2个,然后返回给调用者。是不是有种胸闷的感觉。折腾,造孽啊

或者就返回一个列表,但是因为类型不统一,只能用List<Object>,后续处理的代码的可读性会很差,我相信任何一个技术水平过关或者有职业操守的程序员都不会这么做

元组的出现,就是为了解决这种情况的,很多年轻的语言(PythonScala...)都内置了元组,本项目就是让Java开发人员也可以享受到元组带来的编程时的便捷和快乐

主要实现

类名描述
Tuple元组抽象,实现元组数据结构以及常用操作方法
Tuple0空元组,不包含任何元素
Tuple1只包含1个元素的元组
Tuple2只包含2个元素的元组
Tuple3只包含3个元素的元组
Tuple4只包含4个元素的元组
Tuple5只包含5个元素的元组
TupleN包含N个元素的元组

元组操作

操作API说明
add元组合并
foreach元组迭代
forEachWithIndex元组带序号迭代
swap元组翻转
toArray元组转成数组
toList元组转成列表
get获取元组某一个元素
contains元组中是否包含某个元素
subTuple截取子元组
equals比较2个元组内容是否相同
toString输出字符串表示的元组,如: (123, 456)
repeat重复元组内的所有元素
stream将元组转换成流,类似List.stream
parallelStream将元组转换成并行流,类似List.parallelStream
本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:JTuple 1.1.0 正式版发布,让 Java 支持元组数据类型
加载中

精彩评论

愚_者
愚_者

引用来自“游客”的评论

还不如定义一个对象方便呢
java大量的pojo类,大量的getter setter,太繁琐了,如果pojo里的属性多于5个,写成pojo,也许心里还好过些。但是比如只为了2个属性,写一整套模板代码,太冗长,啰嗦了,而且项目里如果这种情况很多,那项目代码里会出现大量的“小”pojo类,实在是不好看。这也是很多新兴语言吐槽java的一个点
愚_者
愚_者

引用来自“swiftplus”的评论

@红薯 这个东西怎么上的头条,走的后门?
这种损人不利己的话,有意思吗?
你看不起我的东西没关系,你可以选择无视,有必要这样吗?
you can you up, no can no bb!
愚_者
愚_者

引用来自“洛阳码农”的评论

模仿c#吗?
谈不上模仿,很多语言都有元组,不止是C#,而java没有,我只是用Java语言实现了,元组的概念在各个语言里都是基本一样的。在现代的开发中,这本应该是开发语言直接提供的

最新评论(54

TGVvbmFyZA
TGVvbmFyZA

引用来自“游客”的评论

还不如定义一个对象方便呢

引用来自“愚_者”的评论

java大量的pojo类,大量的getter setter,太繁琐了,如果pojo里的属性多于5个,写成pojo,也许心里还好过些。但是比如只为了2个属性,写一整套模板代码,太冗长,啰嗦了,而且项目里如果这种情况很多,那项目代码里会出现大量的“小”pojo类,实在是不好看。这也是很多新兴语言吐槽java的一个点
有个框架叫 #Lombok#
开源中国首席罗纳尔多
开源中国首席罗纳尔多
就是指返回一个封装类是吧?你这个元组就是带有自身方法的封装类的意思吧
愚_者
愚_者

引用来自“赵仁杰”的评论

groovy也有Tuple,可以试试
元组很多语言都有,各种语言里这个数据类型所表达的含义都是差不多的。能在语言级别直接提供支持,会让使用的体验达到最好,因为可以做很多语法糖。
java一直没有直接在语言级别提供,所以第三方实现的时候,受限于语法规则,使用体验上总是达不到最好,不过我这个项目已经在尽可能的提高使用体验了😄
愚_者
愚_者

引用来自“bogang2012”的评论

需要对取出的对象进行强制类型转换,否则会报错,比如下面的HashMap
Tuple2<Integer, HashMap<String, String>> t2 = Tuple2.with(2, new HashMap<String, String>(){{put("aaa", "bbb");}}) ;
HashMap map = (HashMap)t2.get(1);
嗯,get方法默认返回的是Object类型,需要手动强转,下一版会做到自动转
另:你也可以这样取哦,HashMap map = t2.second;
😄
赵仁杰
赵仁杰
groovy也有Tuple,可以试试
两广总督bogang
两广总督bogang
需要对取出的对象进行强制类型转换,否则会报错,比如下面的HashMap
Tuple2<Integer, HashMap<String, String>> t2 = Tuple2.with(2, new HashMap<String, String>(){{put("aaa", "bbb");}}) ;
HashMap map = (HashMap)t2.get(1);
愚_者
愚_者

引用来自“swiftplus”的评论

@红薯 这个东西怎么上的头条,走的后门?
这种损人不利己的话,有意思吗?
你看不起我的东西没关系,你可以选择无视,有必要这样吗?
you can you up, no can no bb!
swiftplus
swiftplus
@红薯 这个东西怎么上的头条,走的后门?
swiftplus
swiftplus
这如果也叫元组的,语言的早就该去见它的原祖去了!
愚_者
愚_者

引用来自“F_L_F”的评论

Tuple1=first blood,Tuple2=double kill,Tuple3=triple kill,Tuple4=quatary kill,Tuple5=penta kill,TupleN=legendary
大神带我飞
返回顶部
顶部