0

リファクタリングしたい次のコードを考えると、発生する最初のパターンに一致する行にのみ関心があります。フィルターと組み合わせて使用​​するなど、これを短縮する方法はありますか?

敬具、

ステファン

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 _ =>
        }
      }
    }
4

1 に答える 1

2

メソッドをご覧くださいcollect。これにより、不完全なパターン マッチを使用して定義された を、 andPartialFunction[A,B]の一種の組み合わせとして使用できます。mapfilter

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 _ =>
}
于 2013-10-10T14:29:57.490 に答える