下面的代码返回页面中的所有链接。 代码被简化为暴露我试图实现的改进。 如何删除围绕hrefStringListBuffer&的可变状态href并使用惯用的Scala?
val hrefList = List("href1" , "href2")
val url = "testUrl"
var hrefStringListBuffer = new scala.collection.mutable.ListBuffer[String]()
for (l <- hrefList) {
var href = getHref(l)
if (!href.startsWith("http")) {
href = getDomainName(url) + "/" + href
}
hrefStringListBuffer = hrefStringListBuffer :+ href
}
def getHref(str : String) = str
def getDomainName(url : String) = url
hrefStringListBuffer.foreach(m => println(m))
有点像? :
val lb = new scala.collection.mutable.ListBuffer[String]()
hrefList.map(m => {
lb :+ getDomainName(m)
})
但是如何迎合开始和支票?
答案 0 :(得分:0)
由于map
只是将一个值转换为另一个值,所以您关心的只是map
的返回主体:
val lb = hrefList.map { l =>
val href = getHref(l)
if (href.startsWith("http"))
href
else
getDomainName(url) + "/" + href
}
即。正文中的href
可以是val
,您可以返回它或getDomainName
结构的结果。
顺便说一句,lb
本身就是一个不可变的List
。不需要任何可变构造作为其任何部分。
答案 1 :(得分:0)
我会使用map并收集:
hrefList.map(getHref(_)).collect{
case elem if !elem.startsWith("http") => getDomainName(url) + "/" + elem
case elemWithHttp => elemWithHttp
}