如何使这些代码行更加scala-ish(更短?)。我仍然感受到Java的感觉(我想远离它)。提前谢谢!
import scala.collection.mutable
val outstandingUserIds: mutable.LinkedHashSet[String] = mutable.LinkedHashSet[String]()
val tweetJson = JacksMapper.readValue[Map[String, AnyRef]](body)
val userObj = tweetJson.get("user")
tweetJson.get("user").foreach(userObj => {
userObj.asInstanceOf[Map[String, AnyRef]].get("id_str").foreach(idStrObj => {
if (outstandingUserIds.exists(outstandingIdStr => outstandingIdStr.equals(idStrObj))) {
outstandingUserIds.remove(idStrObj.asInstanceOf[String])
}
})
})
答案 0 :(得分:1)
您希望在Scala中做的一件事是利用类型推断。这样,你就不需要在LHS上重复自己了:
val outstandingUserIds = mutable.LinkedHashSet[String]()
在闭包变量userObj =>
之后,你也不需要内括号。相反,在foreach {}之后使用大括号来执行多个语句:
tweetJson.get("user").foreach { userObj =>
}
事实上,你可以使用匿名变量' _'并说:
tweetJson.get("user").foreach {
_.get("id_str").foreach ...
}
Scala鼓励使用不可变集合。进一步简化上述内容的一种方法是使用collect
(而不是exists
+ delete
),这将返回仅包含所需元素的新集合。