om-*_*nom 180
通过使用partition方法:
scala> List(1,2,3,4).partition(x => x % 2 == 0)
res0: (List[Int], List[Int]) = (List(2, 4),List(1, 3))
Run Code Online (Sandbox Code Playgroud)
Dan*_*ral 135
好的partition就是你想要的东西 - 还有另一种方法也使用谓词将列表分成两部分:span.
第一个,分区将所有"true"元素放在一个列表中,其他元素放在第二个列表中.
span将把所有元素放在一个列表中,直到元素为"false"(就谓词而言).从那时起,它将把元素放在第二个列表中.
scala> Seq(1,2,3,4).span(x => x % 2 == 0)
res0: (Seq[Int], Seq[Int]) = (List(),List(1, 2, 3, 4))
Run Code Online (Sandbox Code Playgroud)
oxb*_*kes 15
您可能需要查看scalex.org - 它允许您通过签名搜索scala标准库以查找函数.例如,键入以下内容:
List[A] => (A => Boolean) => (List[A], List[A])
Run Code Online (Sandbox Code Playgroud)
你会看到分区.
nai*_*rbv 14
如果您需要额外的东西,也可以使用foldLeft.我只是在分区没有剪切时写了一些这样的代码:
val list:List[Person] = /* get your list */
val (students,teachers) =
list.foldLeft(List.empty[Student],List.empty[Teacher]) {
case ((acc1, acc2), p) => p match {
case s:Student => (s :: acc1, acc2)
case t:Teacher => (acc1, t :: acc2)
}
}
Run Code Online (Sandbox Code Playgroud)