scala 将 Array[Seq[Object]] 中的每种类型的对象隔离为单独的对象引用的方法



PFB case classes

class TypeData()
case class delivery(accept_language:String,customer_id:String) extends TypeData
case class junk(`type`:String) extends TypeData

我有一个类型为 Array[Seq[TypeData]] 的对象"检查",示例数据如下所示,

Array[Seq[TypeData]] = Array(ArrayBuffer(delivery(null,1035), delivery(null,1035), junk(injection), junk(open), junk(injection), delivery(null,1035), delivery(null,1035), delivery(null,1035), delivery(null,1035), delivery(null,1035), junk(injection), junk(injection), delivery(null,1035), junk(injection), delivery(null,1035), junk(injection), junk(injection), junk(injection), delivery(null,1035), junk(injection), junk(injection), delivery(null,1035), delivery(null,1035), junk(injection), delivery(null,1035), delivery(null,1035), delivery(null,1035), delivery(null,1035), junk(injection), junk(injection), delivery(null,1035), junk(injection), junk(click), junk(injection), delivery(null,1035), junk(injection), delivery(null,1035), delivery(null,1035), junk(open), junk(injection), deli...

现在我想知道,如何隔离每个对象类型数据以拥有自己的引用。 示例,

val delivery_data = Seq[delivery]  (should contain only delivery type data) (delivery(null,1035), delivery(null,1035), delivery(null,1035), delivery(null,1035)....) and similarly
val junk_data = Seq[junk] (should contain only junk type data)
(junk(injection), junk(click), junk(injection)

问候萨蒂亚吉特。

val a: Array[Seq[TypeData]] = ???
val (deliveries, junks) = 
  a.flatten.foldLeft((Seq.empty[delivery], Seq.empty[junk])) {
    case ((d, j), e: delivery) => (d :+ e, j)
    case ((d, j), e: junk) => (d, j :+ e)
  }

如果您只想收集交货或仅收集垃圾,则以下方法适用于此:

val deliveries = a.flatten collect {
  case d: delivery => d
}

val junks = a.flatten collect {
  case j: junk => j
} 
val data: Array[Seq[TypeData]] = ???
data(0).partition(_.isInstanceOf[delivery])

最新更新