Scala 带滤波器的共轭模式匹配
考虑到下面我想重构的代码,我只对匹配第一个模式的行感兴趣,有没有办法缩短这个代码,比如说将它与过滤器结合使用 致以最良好的祝愿 斯特凡Scala 带滤波器的共轭模式匹配,scala,Scala,考虑到下面我想重构的代码,我只对匹配第一个模式的行感兴趣,有没有办法缩短这个代码,比如说将它与过滤器结合使用 致以最良好的祝愿 斯特凡 def processsHybridLinks(it: Iterator[String]): Unit = { for (line <- it) { val lineSplit = lineSplitAndFilter(line) lineSplit match { case Array
def processsHybridLinks(it: Iterator[String]): Unit =
{
for (line <- it) {
val lineSplit = lineSplitAndFilter(line)
lineSplit match {
case Array(TaggedString(origin), TaggedString(linkName), TaggedString(target), ".") =>
{
println("trying to find pages " + origin + " and " + target)
val originPageOpt = Page.findOne(MongoDBObject("name" -> (decodeUrl(origin))))
val targetPageOpt = Page.findOne(MongoDBObject("name" -> (decodeUrl(target))))
(originPageOpt, targetPageOpt) match {
case (Some(origin), Some(target)) =>
createHybridLink(origin, linkName, target)
Logger.info(" creating Hybrid Link")
case _ => Logger.info(" couldnt create Hybrid LInk")
}
}
case _ =>
}
}
}
def processsHybridLinks(it:Iterator[String]):单位=
{
为了(线路)
{
println(“尝试查找页面”+原点+”和“+目标”)
val originPageOpt=Page.findOne(MongoDBObject(“name”->(decodeUrl(origin)))
val targetPageOpt=Page.findOne(MongoDBObject(“名称”->(解码URL(目标)))
(originPageOpt,targetPageOpt)匹配{
案例(一些(来源),一些(目标))=>
createHybridLink(原点、链接名、目标)
Logger.info(“创建混合链接”)
case=>Logger.info(“无法创建混合链接”)
}
}
案例=>
}
}
}
看看收集方法。它允许您使用部分函数[a,B]
作为一种组合映射和过滤器:
it.map(lineSplitAndFilter) collect {
case Array(TaggedString(o), TaggedString(n), TaggedString(t), ".") =>
(n, Page.findOne(...), Page.findOne(...))
} foreach {
case (n, Some(o), Some(t)) => ...
case _ =>
}