【发布时间】:2022-01-11 05:01:25
【问题描述】:
val patterns = Seq(
"the name and age are ([a-z]+), ([0-9]+)".r,
"name:([a-z]+),age:([0-9]+)".r,
"n=([a-z]+),a=([0-9]+)".r
)
def transform(subject: String): Option[String] = {
patterns.map(_.unapplySeq(subject)).collectFirst { case Some(List(name, age)) => s"$name$age" }
}
println(transform("name:joe,age:42")) // Some(joe42)
这个在正则表达式列表中查找和转换第一个匹配项的代码可以通过提前返回平均情况来改进
考虑到性能和线程安全,使patterns 成为惰性集合的最佳方法是什么?视图可以被多个线程重用,还是应该为每次调用transform 创建一个新视图?
patterns.viewpatterns.to(LazyList)
【问题讨论】:
-
为什么不使用单一的正则表达式模式?然后懒惰是内置的。
-
确实如此,但提取匹配变得更加困难:
Some(List(joe, 42))vsSome(List(name:joe,age:42, null, null, joe, 42, null, null))。特别是当添加更多模式时
标签: scala thread-safety scala-collections