[英]Making this code with Map and Set more 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])
}
})
})
您想要在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
),该方法将返回仅包含所需元素的新集合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.