The ?
运算符,有时称为三元运算符在 Scala 中不是必需的,因为它包含在常规中if-else
表达:
val x = if (condition) 1 else 2
要在一个map
, 您可以使用flatMap
然后返回一个Option
的两侧if-else
。自从Option
可以隐式转换为Iterable
,效果是列表被展平,并且Nones
被过滤:
val statuses = tweets.flatMap(status => if (status.isTruncate) None else Some(status.getText))
这相当于使用map
进而flatten
:
val statuses = tweets.map(status => if (status.isTruncate) None else Some(status.getText)).flatten
更惯用的是,您可以使用collect
,这使您可以filter
and map
一步使用偏函数:
val statuses = tweets.collect {
case status if !status.isTruncate => status.getText
}
您还可以使用以下方法分两步完成此操作filter
and map
:
val statuses = tweets.filterNot(_.isTruncate).map(_.getText)
这里的缺点是这将迭代列表两次,这可能是不可取的。如果你使用view
,您可以使用相同的逻辑,并且仅迭代列表一次:
val statuses = tweets.view.filterNot(_.isTruncate).map(_.getText)