我有此代码:
case class DataText(name:String)
val dataModels = Seq(DataText("a.dm"),DataText("b.dm"),DataText("c.dm"),DataText("d.dm"),DataText("e.dm"),DataText("f.dm"))
val dataReports = Seq(DataText("a.d0"),DataText("b1.do"),DataText("c2.do"),DataText("d.do"),DataText("e3.do"),DataText("f5.do"))
当dataModels中的项目被“。”分隔时,如何匹配dataModels和dataReports。例如name.split(“。”)。head可以匹配以“。”分隔的dataReports。像name.split(“。”)。head
结果可能是:
Seq(DataText("a.dm"),DataText("d.dm"))
我已经尝试过使用地图和嵌入式过滤器,但是不起作用。
答案 0 :(得分:1)
我会将dataReports
转换为目标子元素的Set
,以通过contains
进行过滤(这是恒定时间O(1)的操作):
val dataReportsSet = dataReports.map(_.name.split("\\.")(0)).toSet
dataModels.filter(dm => dataReportsSet.contains(dm.name.split("\\.")(0)))
// res1: Seq[DataText] = List(DataText(a.dm), DataText(d.dm))