Java元组类型之javatuples
转载:Java元组类型之javatuples
关于方法的返回值,经常需要返回2个值或多个值的一个序列,比如数据表的一条记录,文件的一行内容等。除了使用数组Array、集合(List、Set、Map)这些容器类型之外,在Java中我们就必须创建一个Class来作为返回类型。
在很多语言中都提供元组类型Tuple的支持,比如 .NET Framework 最多支持7个元素的元组,参考这里:
var population = new Tuple<string, int, int, int, int, int, int>(
"New York", , ,
, , , );
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(, "foo", "bar");
cout << t.get<>(); // 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
Java元组类型之javatuples的更多相关文章
- 在Java中使用元组类型的利器
Java本身并没有内置元组这一项特性,要使用元组必须自行实现,所幸现在这些编程语言都支持泛型, 实现非内置元组也变的异常简单, 但是毕竟是非语言内置的语法元素,使用起来肯定不如原生元组来的便捷. 下面 ...
- Python编程Day6——元组类型、字典类型、集合
一.元组类型(tuple) 1.用途:记录多个值,当多个值没有改变的需求此时元组更为合适 2.定义:在()内用逗号分隔开多个任意类型的值(参数为for可以循环的对象) 3.常用操作: 索引(正取向+反 ...
- iOS开发Swift篇—(五)元组类型
iOS开发Swift篇—(五)元组类型 一.元组类型介绍 1.什么是元组类型 元组类型由 N个 任意类型的数据组成(N >= 0),组成元组类型的数据可以称为“元素” 示例: let posit ...
- java string类型的初始化
以下基本上是java string类型最常用的三种方法 new string()就不介绍了 基本等同于第三种 String a; 申明一个string类型的 a,即没有在申请内存地址,更没有在内存 ...
- java 枚举类型分析
最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enum ColorSelect { RED_BAGE = 0, GREEN_BAGE, ...
- java double类型保留两位小数4种方法【转】
4种方法,都是四舍五入,例: import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberF ...
- 【转】java枚举类型enum的使用
原文网址:http://blog.csdn.net/wgw335363240/article/details/6359614 java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到 ...
- swift-06-字符串,字符以及元组类型
1.字符串和字符类型 //在swift中,字符串使用一对双引号括起来 var str = "hello M.SD-DJ" print(str) //字符也要用双引号括起来,用cha ...
- swift之元组类型
一.元组类型是有N个任意类型的数据组成(N>=0),组成元组类型的数据可以称为“元素” 二.元组的定义 如:let position = (x:10.5,y:20) //两个元素的元组 l ...
随机推荐
- 【转】linux shell 正则表达式(BREs,EREs,PREs)差异比较
我想各位也和我一样,再linux下使用grep,egrep, awk , sed, vi的搜索时,会经常搞不太清楚,哪此特殊字符得使用转义字符'\' .. 哪些不需要, grep与egrep的差异 ...
- hadoop HDFS 写入吞吐量
最近一个项目 在大把大把的使用hadoop-HDFS,关于HDFS 的优势网上都快说烂了,这里不再说了,免得被.. 呵呵 废话少说,开整 1.场景描述: 服务器A 监听 服务器B分发任务socket. ...
- 应用数据存储到sdcard上一定要规范,android4.4.2有新规范
如果你的android设备有内部存储空间,即通常所说的机身存储(这就是指主要外部存储),那么你从外部插入SD卡就是一个二级外部存储设备. 最新的Android 4.4系统中,外置存储卡(SD卡)被称为 ...
- 第二百九十五天 how can i 坚持
买了个小米电话卡,写的让周六日送,非得今天给送来,浪费了1块钱.买回来还没法激活,这.. 昨天差点挂掉,今天感觉好多了,不过今天好冷,回来快冻死了. 今天啊,年终奖订下来了,没有想象的高 啊,有点小失 ...
- 第二百四十四、五天 how can I 坚持
昨天忘了.不知咋忘的,加班加迷糊了? 昨天联调接口,又加班了,好歹基本调通了. 今天,下午,开会,有点被领导批的意思,不是批我,是批我们团队. 团队. 不懂自己. 这样做有意义嘛. 睡觉.好烦. 到底 ...
- 转】Nginx+tomcat集群环境搭建(Windows下)
原博文出自于: http://blog.csdn.net/clj198606061111/article/details/22621003 感谢! 实验环境 windows xp s ...
- POJ 3159 Candies (栈优化spfa)
Candies 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/J Description During the kinderga ...
- [iOS基础控件 - 6.12.4] NavigationController vs TabBarController
A.属性 1. Item NavigationController: navigationItem (不需要创建) title rightBarButtonItems/ rightBarButtonI ...
- jQuery基础学习1
标准HTML文件引入jQuery库方法: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &qu ...
- Codeforces Round #257 (Div. 1) C. Jzzhu and Apples (素数筛)
题目链接:http://codeforces.com/problemset/problem/449/C 给你n个数,从1到n.然后从这些数中挑选出不互质的数对最多有多少对. 先是素数筛,显然2的倍数的 ...