有一个从文件中读取的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)
答案 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
和子列表可以通过预先挂起来构建,这在使用列表时效率最高。