在很多语言中都提供元组类型Tuple的支持,比如 .NET Framework 最多支持7个元素的元组, 参考这里:
var population = new Tuple( "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, 参考这里:
tuplet(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.Entryentry2 = Maps.immutableEntry("rensanning.iteye.com", 9527);
(3)Apache commons-collections的 KeyValue
Map.Entryentry3 = new DefaultMapEntry("rensanning.iteye.com", 9527); KeyValue kv = new DefaultKeyValue("rensanning.iteye.com", 9527);
(4)Apache commons-lang3的 Pair
Map.Entryentry4 = new ImmutablePair ("rensanning.iteye.com", 9527);
(5)Apache HttpClient的 NameValuePair
NameValuePair nv = new BasicNameValuePair("rensanning.iteye.com", "9527");
(6)Android的 Pair
Pairp = new Pair ("rensanning.iteye.com", 9527);
。。。。。。等等还有很多,你也可以自己扩展Map.Entry或者封装Class。
Java 6提供 AbstractMap.SimpleEntry
Map.Entryentry1 = new AbstractMap.SimpleEntry ("rensanning.iteye.com", 9527);
把这两个Entity作为静态来嵌入到标示为abstract的AbstractMap里,这个API给的是相当的奇怪!
javatuples是一个很简单的lib,它没有什么华丽的功能,就是提供了支持返回多个元素的一些类。
https://github.com/javatuples/javatuples
版本:javatuples-1.2.jar
最多支持10个元素:
- Unit (1 element)
- Pair (2 elements)
- Triplet (3 elements)
- Quartet (4 elements)
- Quintet (5 elements)
- Sextet (6 elements)
- Septet (7 elements)
- Octet (8 elements)
- Ennead (9 elements)
- Decade (10 elements)
常用的2元组Pair:
// 1元组 Unitu = new Unit ("rensanning.iteye.com"); // 2元组 Pair p = Pair.with("rensanning.iteye.com", 9527); // 3元组 Triplet triplet = Triplet.with("rensanning.iteye.com", 9527, 1.0); //... KeyValue kv = KeyValue.with("rensanning.iteye.com", "9527"); LabelValue 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