如何验证Scala中嵌套Seq的所有子序列均非空?
解决思路:验证所有子序列非空的正确姿势
嘿,咱们先把问题拆解清楚:你需要的是确认seq里的每一个子序列都至少包含一个元素,之前用filter没成功,是因为filter的作用和你要的验证逻辑不匹配哦~
为什么filter不适合做验证?
filter的功能是筛选出符合条件的元素,比如你用seq.filter(_.nonEmpty),得到的是所有非空子序列组成的新集合,但这没法直接告诉你“所有子序列都非空”——你还得额外对比新集合和原集合的长度,这显然是绕远路了。你真正需要的是一个能直接返回「是否所有元素都满足条件」的判断工具。
正确的方法:用forall做全称验证
Scala的集合类提供了forall方法,专门用来做这种“所有元素都符合某条件”的判断。它会遍历集合里的每一个元素,只要有一个元素不满足条件就返回false,全部满足才返回true。
针对你的代码,具体实现如下:
val s1 = Seq(1,2,3,4,5) val s2 = Seq() val s3 = Seq(6,7,8,9) val seq = Seq(s1,s2,s3) // 验证所有子序列是否都非空 val allSubSeqsNonEmpty = seq.forall(_.nonEmpty) // 这里allSubSeqsNonEmpty的值是false,因为s2是空序列
额外需求:找出空的子序列
如果你还需要定位到底哪些子序列是空的,这时候再用filter就合适了:
// 筛选出所有空的子序列 val emptySubSeqs = seq.filter(_.isEmpty) // emptySubSeqs会包含s2这个空序列
总结一下
- 要验证所有元素都满足条件:用
forall - 要筛选出符合条件的元素:用
filter
内容的提问来源于stack exchange,提问作者ps0604
相关产品推荐
相关产品推荐

