第十章 Scala 容器基础(十五):使用flatten方法来展开一个元素为集合的集合

原创
2016/04/12 18:50
阅读数 1W

Problem

    如何把一个嵌套集合展开为一个平铺的单层集合。

Solution

    使用flatten方法来吧一个嵌套集合转化为一个单层集合。为了说明这一点,我们先来创建一个嵌套结合撸啊撸

scala> val lol = List(List(1,2), List(3,4))
lol: List[List[Int]] = List(List(1, 2), List(3, 4))

    使用flatten方法来展开一个潜逃集合:

scala> val result = lol.flatten
result: List[Int] = List(1, 2, 3, 4)

    就像你看到的,flatten方法如其名,把嵌套集合内部的集合展开成为单层集合。flatten方法不只能展开List嵌套,还能应用于其它集合比如Array、ArrayBuffer、Vector等。

scala> val a = Array(Array(1,2), Array(3,4))
a: Array[Array[Int]] = Array(Array(1, 2), Array(3, 4))

scala> a.flatten
res7: Array[Int] = Array(1, 2, 3, 4)

    我们来看一个真实的用例,需求是我们要给所有参加婚礼的夫妻打印一个邀请函,每对夫妻每人一份邀请函,并且邀请函的名字首字母要大写:

scala> val couples = List(List("kim", "al"), List("julia", "terry"))
couples: List[List[String]] = List(List(kim, al), List(julia, terry))

scala> couples.flatten.map(_.capitalize)
res8: List[String] = List(Kim, Al, Julia, Terry)

    flatten方法还有至少两个非常有用的地方,第一个是,你可以把一个字符串的集合展开为一个字符集合,应为字符串本身就是字符的集合:

scala> val list = List("Hello", "world")
list: List[String] = List(Hello, world)

scala> list.flatten
res9: List[Char] = List(H, e, l, l, o, w, o, r, l, d)

    第二,因为Option类型可以被认为是一个容器,里面包含0个活着1个元素,flatten方法是非常有效的对于Some和None组成的集合。它可以展开Some元素形成一个新的集合,同时去掉None元素。

scala> val x = Vector(Some(1), None, Some(3), None)
x: scala.collection.immutable.Vector[Option[Int]] = Vector(Some(1), None, Some(3), None)

scala> x.flatten
res10: scala.collection.immutable.Vector[Int] = Vector(1, 3)


展开阅读全文
加载中

作者的其它热门文章

打赏
1
1 收藏
分享
打赏
0 评论
1 收藏
1
分享
返回顶部
顶部