我正在研究一种方法,该方法对多个项目有 3 种可能的结果:错误、无效和成功。对于其中的每一个,我需要返回一个 json 列表,标识哪些项目是错误的、无效的和成功的。
我目前的尝试如下。我曾经用来Object
表示我的对象的类,因为完全解释需要太长时间。该类Object
有一个方法,该方法process
返回一个布尔值以指示成功或错误,并在对象无效时引发异常:
def process(list: List[Objects]) = {
val successIds = new ListBuffer[Int]();
val errorIds = new ListBuffer[Int]();
val invalidIds = new ListBuffer[Int]();
list.foreach( item => {
try {
if (item.process) {
successIds ++ item.id
} else {
errorIds ++ item.id
}
} catch {
case e: Exception => invalidIds ++ item.id
}
})
JsonResult(
Map("success" -> successIds,
"failed" -> errorIds,
"invalid" -> invalidIds)
)
}
问题是使用可变数据结构不是很“Scala-y”。我更愿意以更实用的方式构建这些列表,但我对 scala 还是很陌生。关于如何做到这一点的任何想法或提示?
我的想法是使用类似 flatMap 方法的方法,该方法采用集合元组并以与 flatMap 方法对单个集合相同的方式对它们进行整理:
def process(list: List[Objects]) = {
val (success, error, invalid) = list.flatMap( item => {
try {
if (item.process) {
(List(item.id), List.empty, List.empty)
} else {
(List.empty, List(item.id), List.empty)
}
} catch {
case e: Exception =>
(List.empty, List.empty, List(item.id))
}
})
JsonResult(
Map("success" -> success,
"failed" -> error,
"invalid" -> invalid)
)
}