Scala中如何判断含WrappedArray的List元素是否全部匹配普通List?
解决方案:验证嵌套集合元素是否全部存在于目标列表中
首先,咱们先明确核心需求:你需要检查fst里所有嵌套在WrappedArray中的元素,是不是都能在sec这个普通List里找到。因为fst是个装着WrappedArray的List,所以第一步得把这些嵌套的元素全部“拉平”,再做存在性验证。
完整代码实现(以字符串元素为例)
首先先修正一下变量定义(Scala里字符串需要加双引号,如果是自定义类型比如case class,逻辑完全一致):
import scala.collection.mutable.WrappedArray // 定义你的两个集合 val fst = List(WrappedArray("Apple", "Graps")) val sec = List("Graps", "Banana", "Mango", "Apple")
接下来是核心检查逻辑:
// 1. 把fst中的所有WrappedArray扁平化为单个元素集合 val allFstElements = fst.flatten // 2. 验证所有元素是否都存在于sec中 val isFullMatch = allFstElements.forall(element => sec.contains(element)) // 根据结果输出 if (isFullMatch) println("匹配") else println("不匹配")
代码解释
fst.flatten:这个方法会把嵌套的集合结构“展开”,把List[WrappedArray[String]]转换成一个包含所有底层元素的Iterable[String]。对你的例子来说,结果就是List("Apple", "Graps")。forall(sec.contains):forall方法会遍历集合中的每个元素,只要所有元素都满足sec.contains(element)这个条件(也就是元素存在于sec中),就返回true,否则返回false。
扩展场景
如果你的fst包含多个WrappedArray,比如:
val fst = List(WrappedArray("Apple", "Graps"), WrappedArray("Banana"))
这个逻辑依然完全适用,flatten会自动把所有WrappedArray里的元素都提取出来,统一做检查。
如果你的元素是自定义的case class(比如case class Fruit(name: String)),只要case class正确实现了equals和hashCode(Scala的case class默认会帮你实现),sec.contains(element)就能正常工作,不需要修改逻辑。
内容的提问来源于stack exchange,提问作者Mahi
相关产品推荐
相关产品推荐

