如何在Option[Long]有定义时将其追加到Seq[Long]集合中?
问题原因
- Scala默认使用不可变Seq,
appended方法不会修改原集合,仅返回追加元素后的新集合,现有代码没有接收方法返回值,原users变量始终是初始化的Seq(x),无法看到追加效果。 - 直接将
Option[Long]类型的y、z作为参数传入appended,元素类型不匹配,需要先提取Option中存储的Long值再执行追加操作。
正确实现
推荐优先使用函数式写法,无需手动判空,代码更简洁健壮:
利用Option可直接转为Seq的特性,Some会转为仅含一个元素的Seq,None会转为空Seq,直接拼接即可自动过滤空值:
object Main extends App { val x: Long = 122222222 val y: Option[Long] = Some(133333333) // val y: Option[Long] = None val z: Option[Long] = Some(144444444) val users: Seq[Long] = Seq(x) ++ y.toSeq ++ z.toSeq println(users) println(users.length) }
如果确实需要分步追加,可使用变量接收每次appended返回的新Seq:
object Main extends App { val x: Long = 122222222 val y: Option[Long] = Some(133333333) // val y: Option[Long] = None val z: Option[Long] = Some(144444444) var users: Seq[Long] = Seq(x) if (y.isDefined) users = users.appended(y.get) if (z.isDefined) users = users.appended(z.get) println(users) println(users.length) }
内容的提问来源于stack exchange,提问作者ThomasReggi
相关产品推荐
相关产品推荐

