Scala中解决if/else返回序列编译错误,生成目标SubjectPack序列
问题解决:生成指定SubjectPack序列
原代码存在两个核心问题导致编译失败:
- 关键字
If需要小写为if map操作后返回的是Seq[Any](混合了SubjectPack和None类型),不符合目标序列的类型要求
针对需求——仅为存在于books中的subject创建SubjectPack序列,提供两种简洁的实现方式:
方式一:先过滤再映射(推荐)
先筛选出在books里的科目,再直接转换为SubjectPack,逻辑清晰且性能更优:
val subjects = Seq("Physics","Maths","English","Chemistry") val books = Seq("Physics", "English") val registeredSubjects = subjects .filter(books.contains) .map(SubjectPack(_))
方式二:使用flatMap处理Option
通过flatMap自动过滤掉None值,只保留符合条件的SubjectPack:
val subjects = Seq("Physics","Maths","English","Chemistry") val books = Seq("Physics", "English") val registeredSubjects = subjects.flatMap { subject => if (books.contains(subject)) Some(SubjectPack(subject)) else None }
两种方式最终都会得到Seq[SubjectPack]类型的结果,包含"Physics"和"English"对应的SubjectPack实例。
内容的提问来源于stack exchange,提问作者IUnknown
相关产品推荐
相关产品推荐

