首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >视图与LazyList

视图与LazyList
EN

Stack Overflow用户
提问于 2021-12-05 19:29:46
回答 1查看 129关注 0票数 0
代码语言:javascript
复制
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)

这段在regexes列表中查找和转换第一个匹配的代码可以通过对一般情况的早期返回来改进。

在考虑到patterns性能和线程安全的情况下,使成为一个懒惰集合的最佳方法是什么?一个视图可以被多个线程重用,或者应该为每次调用transform创建一个新的视图吗?

  1. patterns.view
  2. patterns.to(LazyList)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-07 20:19:25

我仍然觉得使用单个正则表达式可能有好处。

代码语言:javascript
复制
val pattern = List("the name and age are (\\w+), (\\d+)"
                  ,"name:(\\w+),age:(\\d+)"
                  // add more as needed
                  ,"n=(\\w+),a=(\\d+)"
                  ).mkString("|").r

def transform(subject: String): Option[String] =
  pattern.findFirstMatchIn(subject)
         .map(_.subgroups.filter(_ != null).mkString)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70237819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档