Scala中有什么内容,
condition ? first_expression : second_expression;
我可以在scala中的map函数中使用吗? 我希望能够写出这样的东西:
val statuses = tweets.map(status => status.isTruncate? //do nothing | status.getText())
如果无法使用内联函数,如何在map
中编写条件?
答案 0 :(得分:31)
在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
和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)
答案 1 :(得分:2)
您可以过滤,然后映射,
val statuses = tweets.filter(_.isTruncate).map(status=> status.getText())