? 运算符,有时称为 三元运算符,在 Scala 中不是必需的,因为它包含在常规的 if-else 表达式中:
val x = if (condition) 1 else 2
要在map 中使用它,您可以使用flatMap,然后在if-else 的任一侧返回Option。由于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 和map:
val statuses = tweets.collect {
case status if !status.isTruncate => status.getText
}
您也可以使用filter 和map 分两步完成此操作:
val statuses = tweets.filterNot(_.isTruncate).map(_.getText)
这里的缺点是这将遍历列表两次,这可能是不可取的。如果你使用view,你可以使用同样的逻辑并且只遍历列表一次:
val statuses = tweets.view.filterNot(_.isTruncate).map(_.getText)