Java元组类型之javatuples

转载:Java元组类型之javatuples

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

在很多语言中都提供元组类型Tuple的支持,比如 .NET Framework 最多支持7个元素的元组,参考这里

C#代码

var population = new Tuple<string, int, int, int, int, int, int>(
                           "New York", 7891957, 7781984,
                           7894862, 7071639, 7322564, 8008278);  

Scala最多支持22个元素的元组,参考这里

Js代码

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,参考这里

C++代码

tuple<int, string, string> t(5, "foo", "bar");
cout << t.get<1>();  // outputs "foo"  

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

(1)Apache Struts1的LabelValueBean

Java代码

LabelValueBean lv = new LabelValueBean("rensanning.iteye.com", "9527");  

(2)Guava的Maps.immutableEntry

Java代码

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

(3)Apache commons-collections的KeyValue

Java代码

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

Java代码

1 Map.Entry<String,Integer> entry4 = new ImmutablePair<String, Integer>("rensanning.iteye.com", 9527);  

(5)Apache HttpClient的NameValuePair

Java代码

1 NameValuePair nv = new BasicNameValuePair("rensanning.iteye.com", "9527");  

(6)Android的Pair

Java代码

1 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>

Java代码

1 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>

Java代码

 1 // 1元组
 2 Unit<String> u = new Unit<String>("rensanning.iteye.com");
 3 // 2元组
 4 Pair<String,Integer> p = Pair.with("rensanning.iteye.com", 9527);
 5 // 3元组
 6 Triplet<String,Integer,Double> triplet = Triplet.with("rensanning.iteye.com", 9527, 1.0);
 7 //...
 8
 9 KeyValue<String,String> kv = KeyValue.with("rensanning.iteye.com", "9527");
10 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

时间: 2024-10-03 22:25:00

Java元组类型之javatuples的相关文章

java元组-javatuples

前边为了实现一个功能,只是需要List<Map<Stirng,List>>这样的数据结构,但是却需要先定义了这样的一个数据结构  Map<String,List<List<List<String>>>>,并且代码写的比较臃肿,不易于后人阅读和维护.如果使用javatuples有可能又是另一种思路 Martin Fowler 在<重构...>这本书提到过,只能写出一个让计算机理解的程序只是一个普通程序员,只有写出让人理解的程

java基本类型

这近 碰到很问题,问题的根本就是自己的基础不太好,虽然已经干了很久了,还是感觉得要修修内功,内功心法是学习其他功夫的基础,基础一定要打好. java的基本数据分为四组八种: 布尔型:boolean (1/8字节)1位 字节型:char(1字节) 整数型:byte(2字节) short(2字节) int(4字节) long(8字节) 浮点型:float(4字节) double(8字节) 计算最大.最小值公式: 最小(2平方(字节数*8-1)) 最大(2平方(字节数*8-1))- 字节数*8是转化为

iOS开发Swift篇—(五)元组类型

一.元组类型介绍 1.什么是元组类型 元组类型由 N个 任意类型的数据组成(N >= 0),组成元组类型的数据可以称为“元素” 示例: let position = (x : 10.5, y : 20)  // position有2个元素,x.y是元素的名称 let person = (name : "jack")  // person只有name一个元素 let data = ()  // 空的元组 2.元素的访问 var position = (x : 10.5, y : 2

Swift学习—元组类型

知识点: 元组数据中的元素可以有名称也可以没有名称 元组数据中的元素可以为空 元素访问可以通过元素名称或者下标 声明成var的元组数据中的元素可以被改变 可以指定元素的类型(在明确指出元素类型的情况下不能加上元素的名称) 可以用多个变量接收元组数据 可以将元素分别赋值给多个变量 可以用下划线_忽略某个元素的值,从而取出其他的元素 示例代码: //: Playground - noun: a place where people can play import UIKit // 元组类型由N个任意

swift之元组类型

一.元组类型是有N个任意类型的数据组成(N>=0),组成元组类型的数据可以称为“元素” 二.元组的定义 如:let position = (x:10.5,y:20)    //两个元素的元组 let person = (name:"jack")    //一个元素的元组 let data = ()                         //零个元素的元组 又如:let position = (10.5,20)      //省略元素名称的元组 let person =

九、java中类型信息

一.什么是类型信息? 简单的理解 ,“类型信息”就是一种机制, java中用这种机制来实现: 在程序运行过程中发现和使用“类”信息. java的类型信息主要有两块组成:RTTI和反射. 二.什么是RTTI? RTTI,全称是Run-Time Type Information  ,名字的含义是在运行时识别一个对象的类型. 1.Class对象 java中用一个特殊的对象Class, 通过它来执行其RTTI(这是一种思想, 用一个Class来表示所有类型对象,通过具体的Class里面的属性再来区分到底

Day 2 : 变量、JAVA基本类型、运算符和表达式-1

1. 变量 1.1. 什么是变量 在日常生活中,人们会用到大量数据,像去ATM机取款,首先,需要插入银行卡,这个过程其实就是ATM机的系统在获取银行卡号这个数据,而后,输入密码,这个过程也是在获取数据,也就是密码.在后续进行的业务处理中,像存钱.取钱.转帐汇款等等,银行卡号和密码会被反复的.频繁的使用, 那就需要一个存储这些数据的地方. 在软件系统中,是将数据存储在内存之中的,而对内存中的数据的引用就是变量,可以理解为变量就是内存中数据的代词. 简单说, 变量就是指代在内存中开辟的存储空间,用于

深入理解Java注解类型(@Annotation)

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 深入理解Java注解类型(@Annotation) - zejian的博客 - 博客频道 - CSDN.NET zejian的博客 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯]流畅的Python,终于等到你!    &am

Java 基本类型包装类

Java基本类型包装类: 基本数据类型    基本类型包装类 byte               Byte      short              Short      int                 Integer      long               Long      float               Float      double            Double      char               Character      boo