私は、複数の項目に対して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)
)
}