i.a*_*iel 13 scala playframework-2.0
是否有更短/更好的方法来执行以下操作:
mySeq.map { elmt =>
// do stuff
}
if (mySeq.isEmpty) {
// some other stuff
}
Run Code Online (Sandbox Code Playgroud)
PS:我使用PlayFramework,这意味着在模板中使用,所以如果有任何"帮手"有我错过了,我会很高兴地发现那些;)
Jea*_*let 15
这个怎么样?
mySeq.headOption.map { _ =>
mySeq.map { elmt =>
// do stuff
}
}.getOrElse {
// some other stuff
}
Run Code Online (Sandbox Code Playgroud)
你可以使用match:
l match {
case l if !l.isEmpty => l.map{ // do stuff }
case _ => // some other stuff
}
Run Code Online (Sandbox Code Playgroud)
用于List:
l match {
case h :: t => l.map{ // do stuff }
case _ => // some other stuff
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以定义自己的方法:
import scala.collection.generic.CanBuildFrom
import scala.collection.TraversableLike
class FoldEmpty[T, S[T] <: TraversableLike[T, S[T]]](l: S[T]){
def foldEmpty[B, That](notEmpty: T => B, empty: => That)(implicit cbf: CanBuildFrom[S[T], B, That]): That =
l match {
case t if !t.isEmpty => l map notEmpty
case _ => empty
}
}
implicit def seqToFoldEmpty[T, S[T] <: TraversableLike[T, S[T]]](l: S[T]) = new FoldEmpty(l)
Run Code Online (Sandbox Code Playgroud)
用法:
scala> IndexedSeq(1, 2, 3).foldEmpty( _ + 1 , IndexedSeq(-1))
res0: IndexedSeq[Int] = Vector(2, 3, 4)
scala> IndexedSeq[Int]().foldEmpty( _ + 1 , Seq(-1))
res1: Seq[Int] = List(-1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4722 次 |
| 最近记录: |