• 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

  • 相关阅读:
    HDu 2830 Matrix Swapping II(dp)
    服务器http处理流程
    iOS网络缓存机制
    软件设计需要的两项能力:理解与抽象
    编程思想的本质
    编程思想:面向对象与面向过程
    You Can Customize Synthesized Instance Variable Names @property
    nil / Nil / NULL / NSNull VS objc_msgSend
    对OC中property的一点理解
    @property 的本质是什么?
  • 原文地址:https://www.cnblogs.com/gaopeng527/p/4605322.html
Copyright © 2020-2023  润新知