`
rensanning
  • 浏览: 3553196 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38226
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607650
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682835
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89562
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:402165
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69770
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91861
社区版块
存档分类
最新评论

Java元组类型之javatuples

    博客分类:
  • Java
 
阅读更多
关于方法的返回值,经常需要返回2个值或多个值的一个序列,比如数据表的一条记录,文件的一行内容等。除了使用数组Array、集合(List、Set、Map)这些容器类型之外,在Java中我们就必须创建一个Class来作为返回类型。

在很多语言中都提供元组类型Tuple的支持,比如 .NET Framework 最多支持7个元素的元组,参考这里
var population = new Tuple<string, int, int, int, int, int, int>(
                           "New York", 7891957, 7781984, 
                           7894862, 7071639, 7322564, 8008278);


Scala最多支持22个元素的元组,参考这里
val t = new Tuple4(4,3,2,1)
val t = (4,3,2,1) // syntactic sugar

val sum = t._1 + t._2 + t._3 + t._4


C++(STL)的Tuple,参考这里
tuple<int, string, string> t(5, "foo", "bar");
cout << t.get<1>();  // outputs "foo"


先看看Java中如果想返回“一个”键值对Pair,该怎么做?

(1)Apache Struts1的LabelValueBean
LabelValueBean lv = new LabelValueBean("rensanning.iteye.com", "9527");


(2)Guava的Maps.immutableEntry
Map.Entry<String,Integer> entry2 = Maps.immutableEntry("rensanning.iteye.com", 9527);


(3)Apache commons-collections的KeyValue
Map.Entry<String,Integer> entry3 = new DefaultMapEntry("rensanning.iteye.com", 9527);
KeyValue<String,Integer> kv = new DefaultKeyValue("rensanning.iteye.com", 9527);


(4)Apache commons-lang3的Pair
Map.Entry<String,Integer> entry4 = new ImmutablePair<String, Integer>("rensanning.iteye.com", 9527);


(5)Apache HttpClient的NameValuePair
NameValuePair nv = new BasicNameValuePair("rensanning.iteye.com", "9527");


(6)Android的Pair
Pair<String, Integer> p = new Pair<String, Integer>("rensanning.iteye.com", 9527);


。。。。。。等等还有很多,你也可以自己扩展Map.Entry或者封装Class。

Java 6提供AbstractMap.SimpleEntry<K,V>和AbstractMap.SimpleImmutableEntry<K,V>
Map.Entry<String,Integer> entry1 = new AbstractMap.SimpleEntry<String, Integer>("rensanning.iteye.com", 9527);

把这两个Entity作为静态来嵌入到标示为abstract的AbstractMap里,这个API给的是相当的奇怪!

javatuples是一个很简单的lib,它没有什么华丽的功能,就是提供了支持返回多个元素的一些类。

https://github.com/javatuples/javatuples

版本:javatuples-1.2.jar

最多支持10个元素:
  • Unit<A> (1 element)
  • Pair<A,B> (2 elements)
  • Triplet<A,B,C> (3 elements)
  • Quartet<A,B,C,D> (4 elements)
  • Quintet<A,B,C,D,E> (5 elements)
  • Sextet<A,B,C,D,E,F> (6 elements)
  • Septet<A,B,C,D,E,F,G> (7 elements)
  • Octet<A,B,C,D,E,F,G,H> (8 elements)
  • Ennead<A,B,C,D,E,F,G,H,I> (9 elements)
  • Decade<A,B,C,D,E,F,G,H,I,J> (10 elements)

常用的2元组Pair:
  • KeyValue<A,B>
  • LabelValue<A,B>

// 1元组
Unit<String> u = new Unit<String>("rensanning.iteye.com");
// 2元组
Pair<String,Integer> p = Pair.with("rensanning.iteye.com", 9527);
// 3元组
Triplet<String,Integer,Double> triplet = Triplet.with("rensanning.iteye.com", 9527, 1.0); 
//...
		
KeyValue<String,String> kv = KeyValue.with("rensanning.iteye.com", "9527");
LabelValue<String,String> lv = LabelValue.with("rensanning.iteye.com", "9527");


参考:
http://tech.puredanger.com/2010/03/31/do-we-want-a-java-util-pair/
http://mail.openjdk.java.net/pipermail/core-libs-dev/2010-March/003995.html
分享到:
评论
2 楼 seu_04004414 2015-07-21  
总结的很666666666
1 楼 di1984HIT 2014-07-22  
写的很好~

相关推荐

    Java元组类型javatuples使用实例

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

    java元组jar包源代码

    java元组jar包,官方下载,亲自可用! javatuples ---------- To learn more and download latest version: http://www.javatuples.org

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

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

    Python应用开发-元组类型.pptx

    元组类型是 Python 中常用的数据类型之一,它是 tuple 类的类型,与列表 list 几乎相似,区别在于: 1. 元组数据使用圆括号()来表示,例如 t=('a','b','c'); 2. 元组数据的元素不能改变,只能读取;因此可以简单...

    java.元组(解决方案).md

    java.元组(解决方案).md

    Swift教程:Swift基础,元组(tuple)类型

    在这个“Swift教程:Swift基础,元组(tuple)类型”中,我们将深入探讨Swift中的元组类型,这是一种非常有用的特性,它允许我们临时组合不同类型的值。 元组在Swift中扮演着关键角色,特别是在那些需要一次性返回...

    9、元组类型>>>>>>>>>>>>>>>>>

    9、元组类型&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;

    python构造函数、元组实例.html

    了解几个简单的构造函数,如何修改元组,访问元组,遍历元组,了解元组的内置函数,len(),计算元组个数,元组的最大、最小值,tuple()将列表转化成元组

    02-python-列表-可变和不可变类型-元组-列表与元组的速度比较

    接着,元组(Tuple)是Python中的不可变数据类型。元组用圆括号`()`表示,元素之间同样用逗号分隔。例如,`(1, 2, 3)`就是一个包含整数的元组。因为元组不可变,一旦创建就不能更改,所以它们在需要保证数据完整性...

    Python数据类型之Tuple元组实例详解

    Python中的元组(Tuple)是一种有序的序列,它是不可变数据类型,这意味着一旦创建,元组的元素就不能被修改。元组使用圆括号 `()` 来定义,它可以包含任意数量和类型的元素。 1. **元组的创建** 创建元组非常简单...

    java.元组.md

    项目中碰到的,记录一下

    C# 元组和值元组的具体使用

    C# 7.0已经出来一段时间了,大家都知道新特性里面有个对元组的优化:ValueTuple。这里利用详尽的例子详解Tuple VS ValueTuple(元组类VS值元组),10分钟让你更了解ValueTuple的好处和用法。 如果您对Tuple足够了解...

    测量程序编制 - python 27数据类型:Tuple(元组)-概述.pptx

    PYTHON 元组(Tuple)类型详解 Python中有多种数据类型,其中元组(Tuple)是一种重要的序列结构。元组和列表(List)相似,但它们之间存在一些关键的区别。本文将详细介绍Python中的元组类型,包括其定义、特点、...

    Python语言基础:元组.pptx

    `tuple()` 函数用于创建一个空元组或者将其他类型的序列转换为元组。例如: ```python # 创建一个空元组 empty_tuple = tuple() print(empty_tuple) # 输出:() # 将字符串转换为元组 string_to_tuple = tuple(...

    06-Python数据类型-元组

    06_Python数据类型_元组 文档的配套 jupyter notebook 源码资源,欢迎下载使用。 目录结构: Python的基础数据类型 元组 定义元组 访问元组元素 元组切片 元组不可变性 元组与列表的转换 元组的优势 元组运算符 元组...

    tupl:JavaScript的元组类型

    JavaScript的元组类型。 安装 package.json / bower.json: dependencies: { "tupl": "andy-hanson/tupl" } 用 import tupl from 'tupl/dist/tupl' export default tupl( // Name is 'Point'. This helps with ...

    c++元组的基本用法1

    C++元组(tuple)是C++11标准引入的一个强大工具,它允许程序员存储不同类型的值在一个单一的集合中。元组的概念类似于结构体,但比结构体更加灵活,无需预先定义结构类型即可使用。元组的特性使得它在处理多类型...

    在用户空间中改进PHP的类型系统泛型类型列表元组和结构

    元组(Tuple)在许多语言中是表示固定数量和类型元素的集合,它们不同于数组,因为元组的每个位置都有特定的类型。在PHP中,由于其动态类型特性,元组的实现通常依赖于数组,但是元组的静态类型检查很难实现。`...

    Python 将DataFrame数据转换成元组 Python源码

    Python 将DataFrame数据转换成元组 Python源码Python 将DataFrame数据转换成元组 Python源码Python 将DataFrame数据转换成元组 Python源码Python 将DataFrame数据转换成元组 Python源码Python 将DataFrame数据转换成...

Global site tag (gtag.js) - Google Analytics