You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala中遍历Seq[A]与Seq[B]序列,验证指定匹配规则是否成立

实现方案

首先注意type是Scala关键字,定义case class时需要用反引号包裹:

case class A(`type`: String, label: String, code: String)
case class B(key: String, regex: String)

1. 预编译正则提升性能

先把Seq[B]转成Map[String, scala.util.matching.Regex],预编译正则避免重复编译开销:

val rules: Seq[B] = // 你的规则序列
val ruleMap: Map[String, scala.util.matching.Regex] = rules.map(b => b.key -> b.regex.r).toMap

2. 单个元素验证逻辑

编写函数判断单个A元素是否符合规则:

def validateA(a: A, ruleMap: Map[String, scala.util.matching.Regex]): Boolean = {
  ruleMap.get(a.`type`) match {
    case Some(regex) => regex.matches(a.code)
    case None => true // 无对应规则的元素默认合法,需视为非法可改为false
  }
}

3. 批量验证场景

  • 检查所有元素是否都合规:
val seqA: Seq[A] = // 你的A元素序列
val allValid: Boolean = seqA.forall(validateA(_, ruleMap))
  • 筛选出所有不符合规则的元素:
val invalidElements: Seq[A] = seqA.filterNot(validateA(_, ruleMap))

4. 带错误信息的验证(可选)

如果需要明确错误详情:

def validateAWithError(a: A, ruleMap: Map[String, scala.util.matching.Regex]): Option[String] = {
  ruleMap.get(a.`type`) match {
    case Some(regex) if !regex.matches(a.code) => 
      Some(s"元素[A(type=${a.`type`}, label=${a.label}, code=${a.code})]的code不符合规则${regex.pattern}")
    case _ => None
  }
}

val errors: Seq[String] = seqA.flatMap(validateAWithError(_, ruleMap))

内容的提问来源于stack exchange,提问作者ahabrahante

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 20:48:19