Lis*_*isa 21 scala apache-spark spark-streaming map-function
Scala中有什么东西,
condition ? first_expression : second_expression;
Run Code Online (Sandbox Code Playgroud)
我可以在scala中使用map函数吗?我希望能够写出这样的东西:
val statuses = tweets.map(status => status.isTruncate? //do nothing | status.getText())
Run Code Online (Sandbox Code Playgroud)
如果无法使用内联函数,如何在其中写入条件map
?
Ben*_*ich 35
的?
操作者,有时也被称为三元运算符是不Scala中必要的,因为它是由有规律归入if-else
表达式:
val x = if (condition) 1 else 2
Run Code Online (Sandbox Code Playgroud)
要在a中使用它map
,你可以使用flatMap
然后Option
在它的两边返回一个if-else
.由于Option
可以隐式转换为Iterable
,因此效果是列表被展平,并且Nones
被过滤:
val statuses = tweets.flatMap(status => if (status.isTruncate) None else Some(status.getText))
Run Code Online (Sandbox Code Playgroud)
这相当于使用map
然后flatten
:
val statuses = tweets.map(status => if (status.isTruncate) None else Some(status.getText)).flatten
Run Code Online (Sandbox Code Playgroud)
更惯用,可以使用collect
,它允许你filter
和map
在一个步骤中使用的局部功能:
val statuses = tweets.collect {
case status if !status.isTruncate => status.getText
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用filter
和执行以下两个步骤map
:
val statuses = tweets.filterNot(_.isTruncate).map(_.getText)
Run Code Online (Sandbox Code Playgroud)
这里的缺点是,这将在列表上重复两次,这可能是不合需要的.如果您使用view
,您可以使用相同的逻辑,只迭代列表一次:
val statuses = tweets.view.filterNot(_.isTruncate).map(_.getText)
Run Code Online (Sandbox Code Playgroud)
你可以过滤然后映射,
val statuses = tweets.filter(_.isTruncate).map(status=> status.getText())
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
30669 次 |
最近记录: |