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

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)


转载于:https://my.oschina.net/nenusoul/blog/657526

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值