如何把&#34; <url>&#34;到&#34; </url>&#34;进入名单?

时间:2017-08-02 04:01:49

标签: scala list

有一个从文件中读取的List,如下所示:

lines: List[String] = List(a, b, <url>, <loc>1</loc>, </url>, c, <url>, <loc>2</loc>, </url>, d)

预期:

result = List(a, b, List(<url>, <loc>1</loc>, </url>), c, List(<url>, <loc>2</loc>, </url>), d)

1 个答案:

答案 0 :(得分:1)

这似乎有效。

val result = lines.foldRight(List[List[String]]()){
  case (s, lls) => if (s.matches("<.+>")
                    && lls.nonEmpty
                    && lls.head.head.matches("<.+>"))
                     (s :: lls.head) :: lls.tail
                   else
                     List(s) :: lls
  }
// result: List[List[String]] = List(List(a), List(b), List(<url>, <loc>1</loc>, </url>), List(c), List(<url>, <loc>2</loc>, </url>), List(d))

lines从右侧折叠,以便结果List和子列表可以通过预先挂起来构建,这在使用列表时效率最高。