如何过滤Option类型列中的None值并提取List[String]集合
你写的代码没有得到预期结果,核心是你混淆了Quill Query 容器的flatMap和Scala 集合/Option的flatMap的作用。query[Anm].map(_.anmKey)得到的是Query[Option[String]]类型,你直接对它调用.flatMap(_),Quill会将该操作解析为数据库层面的JOIN逻辑,而非你预期的“过滤None、提取Option内部的String值”。
可行的两种解决方案:
- 方案1:数据库层面过滤空值,直接返回
List[String]
用nonEmpty过滤掉anmKey为NULL的行,再直接取Option的值即可,生成的SQL会自带WHERE anm_key IS NOT NULL的条件,性能更好:run(query[Anm].filter(_.anmKey.nonEmpty).map(_.anmKey.get)) - 方案2:内存层面处理结果,适合需要保留空值做后续其他逻辑的场景
先把所有anmKey查出来得到List[Option[String]],再用Scala集合自带的flatten方法过滤None提取值:run(query[Anm].map(_.anmKey)).flatten
内容的提问来源于stack exchange,提问作者user3416742
相关产品推荐
相关产品推荐

