地图功能中的条件

2024-04-21

Scala 有没有类似的东西,

condition ? first_expression : second_expression;

我可以在scala中的map函数中使用它吗? 我希望能够写出这样的东西:

val statuses = tweets.map(status => status.isTruncate? //do nothing | status.getText())

如果内联函数不可能,我该如何在其中编写条件map?


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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

地图功能中的条件 的相关文章

随机推荐