我如何通过字段相等来匹配Scala中的两个集合

时间:2020-10-24 01:19:42

标签: scala collections

我有此代码:

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"))

我已经尝试过使用地图和嵌入式过滤器,但是不起作用。

1 个答案:

答案 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))