Scala与`collect`结合使用
示例
尽管部分函数通常用作总函数的便捷语法,但通过包含最终通配符match(case_),在某些方法中,部分函数是关键。习惯性Scala中一个非常常见的示例是collect在Scala集合库中定义的方法。在此,部分函数允许检查集合元素以映射和/或过滤它们的通用功能以一种紧凑的语法出现。
例子1
假设我们有一个平方根函数定义为偏函数:
val sqRoot:PartialFunction[Double,Double] = { case n if n > 0 => math.sqrt(n) }我们可以使用collect组合器来调用它:
List(-1.1,2.2,3.3,0).collect(sqRoot)
有效地执行与以下操作相同的操作:
List(-1.1,2.2,3.3,0).filter(sqRoot.isDefinedAt).map(sqRoot)
例子2
sealed trait SuperType //“sealed”修饰符仅允许在当前构建单元内进行继承
case class A(value: Int) extends SuperType
case class B(text: String) extends SuperType
case object C extends SuperType
val input: Seq[SuperType] = Seq(A(5), B("hello"), C, A(25), B(""))
input.collect {
case A(value) if value < 10 => value.toString
case B(text) iftext.nonEmpty=> text
} // Seq("5", "hello")上面的示例中有几件事要注意:
每个模式匹配的左侧都会有效地选择要处理的元素,并将其包含在输出中。没有匹配的任何值都将case被忽略。
右侧定义了要应用的特定案例处理。
模式匹配将绑定变量用于保护语句(if子句)和右侧。
热门推荐
10 圣诞祝福语简短给师姐
11 恭喜高考完祝福语简短
12 赛前祝福语加姓名简短
13 生日贺卡祝福语简短创意
14 喜得孙子祝福语简短唯美
15 六一祝福语简短十六字
16 日生日贺卡祝福语简短
17 留学生祝福语简短
18 对转校同学祝福语简短