scala - 如何过滤 JsObject 的 ArrayBuffer 以删除具有特定值的项目

标签 scala playframework playframework-2.3

我的 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/

相关文章:

web-services - Play Framework WS.url 永远卡住

javascript - 重定向到 .scala.html 文件(Scala Play)仅显示纯文本

scala - 在 Scala 中调用具有相同实例的多个函数

Scala:版本之间的二进制不兼容

java - 运行 sbt 测试套件两次会导致 jdbc 驱动程序未找到错误

scala - 如何在编译 : java. lang.StackOverflowError 期间编译带有未捕获异常的 play scala 项目时增加堆栈大小

java - 有没有办法让 Play 框架和 JPA 在列名中使用下划线?

java - 创建 SQL 表时出错。埃类类

scala - 如何找到阻止隐式转换的原因(皮条客类)?

multithreading - 我该如何打断Play中的实时任务!框架