我的 play 2.3 应用程序中有以下变量
private var messages = ArrayBuffer[JsObject]()
并且我想从消息中删除具有键“message_id”的特定值的所有元素。我当前的实现如下
messages = messages.filterNot{item =>
if ((item \ "message_id").as[Int] == myMessageId){
true
} else {
false
}
}
这行得通,但我几乎可以肯定我错过了一种更优雅的类似 scala 的方法来完成同样的事情。过滤包含特定键/值对的 JsObject 的惯用方法是什么?
最佳答案
您可以使用 Play 的 Reads
转换器。
val messageId = (__ \ "message_id").read[Int].filter(_ == myMessageId)
messages = messages.filter(_.validate(messageId).isSuccess)
这也将处理 message_id
不存在或不知何故不是 int 的情况,但根据您的用例,您可能不想默默地丢弃该错误。
关于scala - 如何过滤 JsObject 的 ArrayBuffer 以删除具有特定值的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25254969/