快速业务通道

面向Java开发人员的Scala指南 - 集合类型 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
uot; -> "Bills",       "Miami" -> "Dolphins",       "Los Angeles" -> null)    assertEquals(footballTeamsAFCEast.get("Miami"), Some("Dolphins"))    assertEquals(footballTeamsAFCEast.get("Miami").get(), "Dolphins")    assertEquals(footballTeamsAFCEast.get("Los Angeles"), Some(null))    assertEquals(footballTeamsAFCEast.get("Sacramento"), None)   }

面向Java开发人员的Scala指南 - 集合类型(2)

时间:2011-01-30 IBM Ted Neward

注意,Scala Map 中 get 的返回值实际上并不对应于传递的键。相反,它是一个 Option[T] 实例,可以是与某个值有关的 Some(),也可以是 None,因此可以很清晰地表示没有在 map 中找到键。如果它可以表示 map 上存在某个键,但是有对应的 null 值,这一点特别重要了。比如清单 1 中 Los Angeles 键。

通常,当处理 Option[T] 时,程序员将使用模式匹配,这是一个非常函数化的概念,它允许有效地 “启用” 类型和/或值,更不用说在定义中将值绑定到变量、在 Some() 和 None 之间切换,以及提取 Some 的值(而不需要调用麻烦的 get() 方法)。清单 2 展示了 Scala 的模式匹配:

清单 2. 巧妙的模式匹配

@Test def optionWithPM =   {    val footballTeamsAFCEast =     Map("New England" -> "Patriots",       "New York" -> "Jets",       "Buffalo" -> "Bills",       "Miami" -> "Dolphins")    def show(value : Option[String]) =    {     value match     {      case Some(x) => x      case None => "No team found"     }    }    assertEquals(show(footballTeamsAFCEast.get("Miami")), "Dolphins")   }

元组和集合

在 C++ 中,我们将之称为结构体。在 Java 编程中,我们称之为数据传输对象或参数对象。在 Scala 中,我们称为元组。实质上,它们是一些将其他数据类型收集到单个实例的类,并且不使用封装或抽象 — 实际上,不 使用任何抽象常常更有用。

在 Scala 创建一个元组类型非常的简单,这只是主体的一部分:如果首先将元素公开给外部,那么在类型内部创建描述这些元素的名称就毫无价值。考虑清单 3:

清单 3. tuples.scala

// JUnit test suite // class TupleTest {   import org.junit._, Assert._   import java.util.Date   @Test def simpleTuples() =   {    val tedsStartingDateWithScala = Date.parse("3/7/2006")    val tuple = ("Ted", "Scala", tedsStartingDateWithScala)    assertEquals(tuple._1, "Ted")    assertEquals(tuple._2, "Scala")    assertEquals(tuple._3, tedsStartingDateWithScala)   } }

创建元组非常简单,将值放入一组圆括号内,就好象调用一个方法调用一样。提取这些值只需要调用 “_n” 方法,其中 n 表示相关的元组元素的位置参数:_1 表示第一位,_2 表示第二位,依此类推。传统的 Java java.util.Map 实质上是一个分两部分的元组集合。

元组可以轻松地实现使用单个实体移动多个值,这意味着元组可以提供在 Java 编程中非常重量级的操作:多个返回值。例如,某个方法可以计算 String 中字符的数量,并返回该 String 中出现次数最多的字符,但是如果程序员希望同时 返回最常

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号