设为首页 加入收藏

TOP

scala学习手记37 - 容器的使用(一)
2017-10-10 12:11:47 】 浏览:6665
Tags:scala 学习 手记 容器 使用

这次统一看一下scala中容器类的几个方法。

Set

filter()方法

filter()方法用来从Set中过滤获取含有指定特征的元素。示例代码如下:

val colors1 = Set("Blue", "Green", "Red", "yellow")
val filteredSet = colors1 filter (_ contains "l")
println(filteredSet mkString ",")

上面的代码从一个Set中过滤出了含有字符“l”的元素,而后调用mkString方法将过滤结果拼接打印出来。看一下结果:

image

++()方法

++()方法用来拼接两个Set。示例代码如下:

val colors1 = Set("Blue", "Green", "Red", "yellow")
val colors2 = Set("White", "Black")

val combinedSet = colors1 ++ colors2
println(combinedSet mkString ",")

很简单的程序,看一下结果:

image

**()方法

**()方法用来找出两个Set的并集(教材上说的是交集,有误)。示例代码如下:

val colors1 = Set("Blue", "Green", "Red", "yellow")
val colors2 = Set("White", "Black", "Red")

val uniondSet = colors1 ++ colors2
println(unionSet mkString ",")

执行结果:

image

map()方法

map()方法可以对Set的每个元素执行操作,最后返回的是一个新的集合。示例代码如下:

val colors1 = Set("Blue", "Green", "Red", "yellow")

val colorSet = colors1 map ("color is : " + _)

colorSet foreach {
  println(_)
}

这里打印Set元素时使用了内置的迭代器foreach。执行结果:

image

Map

filterKeys()方法

filterKeys()方法用来对Map的key进行过滤,示例代码如下:

val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher")
val filteredMap = roster filterKeys (_ contains ("Jac"))
println("Filtered Size : " + filteredMap.size)

执行结果如下:

image

filter()方法

也可以使用filter()方法来执行过滤,不过filter()方法中的函数值操作的对象是Key-Value对。看一下代码:

val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher")
val filteredMap = roster filter {
  ele => val (k, v) = ele 
    k contains ("Jac")
}
println("Filtered Size : " + filteredMap.size)

get()方法

get()方法用来从Map中取值,不过返回值的类型是Optional[T],示例代码如下:

val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher")
println("Jack" +  " is a " + (roster get "Jack").get )

说实话,我不太喜欢Optional,还好scala不需要让我忍受这个东西,它还提供了另一种更简洁的获取kv对的方式:

val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher")
println("Jack" +  " is a " + roster("Jack") )

在上面的代码里我们直接在Map对象后面使用了一个括号来取值。前面曾提到过,这是使用了Map的一个工厂方法apply。

update()方法

update()方法可以用来“更新”Map对象。因为我们用的Map是一个不变的类的对象,它的“更新”并不会影响之前的对象,它会返回一个新的对象。

val roster = Map("Jack" -> "Solider", "Jane" -> "Teacher")
val updatedRoster = roster.updated("Jane", "Nurse")
println("Jane" +  " is a " + roster("Jane") )
println("Jane" +  " is a " + updatedRoster("Jane") )

执行结果如下:

image

List

在scala中Set和Map都有可变和不变两种实现,但是List只有不变的实现。scala中的List实现有些类似于java的LinkedList。scala的List的大部分操作都是围绕head和tail执行的。

如下是一个List使用的示例,我们要访问List示例的第一个元素可以使用list.head()方法也可以直接执行list(0):

val list1 = List("Red", "Yellow", "Blue")
println(list1.head)
println(list1(0))

执行结果是:

image

::()方法

这个方法用于在List前添加元素。a :: list可以读作“在List前添加a”。示例代码如下:

val list1 = List(
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇scala学习手记36 - 容器基础 下一篇scala学习手记37 - 容器的使用

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目