繁体   English   中英

使用Map编写此代码并设置更多Scala-ish

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM