我正在研究一個有多個項目的3個可能結果的方法:錯誤,無效和成功。對於每一個我需要返回一個json列表來識別哪些項目出錯,無效並且成功。從flatMap返回多個集合
我目前的嘗試如下。我用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)
)
}
看看這個要點解釋使用應用仿函數進行非故障快速驗證,由ScalaZ提供:https://gist.github.com/970717 – opyate