相关疑难解决方法(0)

如何扩展Scala列表以不按显式位置而是按给定谓词/条件进行切片

对于

trait Item
case class TypeA(i: Int) extends Item
case class TypeB(i: Int) extends Item
Run Code Online (Sandbox Code Playgroud)

考虑一个Scala项目列表,例如

val myList = List(TypeA(1), TypeB(11), TypeB(12), 
                  TypeA(2), TypeB(21), 
                  TypeA(3), TypeB(31))
Run Code Online (Sandbox Code Playgroud)

目的是定义一个新slice方法,该方法可以应用到myList谓词或条件作为参数。例如

myList.slice { x => x.isInstanceOf[TypeA] }
Run Code Online (Sandbox Code Playgroud)

会提供

List(List(TypeA(1), TypeB(11), TypeB(12)), 
     List(TypeA(2), TypeB(21)), 
     List(TypeA(3), TypeB(31)))
Run Code Online (Sandbox Code Playgroud)

在此示例中,将通过以下方式获得相同的结果

myList.slice { case TypeA(x) => x < 10 }
Run Code Online (Sandbox Code Playgroud)

非常感谢。

collections scala list slice

2
推荐指数
1
解决办法
716
查看次数

标签 统计

collections ×1

list ×1

scala ×1

slice ×1