尝试过滤出Scala中的列表

时间:2019-01-04 05:38:53

标签: scala

我的要求如下,

我有两个班级,可以说AB

case class A(id: String)

case class B(p1: Sting, p2: String)

现在,我有两套。

val aSet: Set[A] = ...

val bSet: Set[B] = ...

现在,对于aSet中的每个元素,我想从B's中找到所有bSet的集合,

a.id == b.p1 ++ b.p2

我想出了以下解决方案,

val myRequiredSet = aSet.map(a => bSet.filter(b => b.p1 ++ b.p2 == a.id))

我的麻烦是aSet的大小约为10,000,而bSet的大小约为150,000。

这需要很长时间,我无法提出更好的解决方案。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

虽然,这个问题有点尴尬。我认为您确实是在面对这个问题。我强烈建议您花更多的精力来正确表达您将来的问题,否则SO的人会忽略它。

假设您有以下两个课程。

case class A(id: String)

case class B(p1: String, p2: String)

你有这两套,

val aSet: Set[A] = ...

val bSet: Set[B] = ...

在这种情况下,对于A的任何实例,id对于p1 ++ p2的对应实例都是B

现在,对于A's中的所有aSet,您想从B's中找到具有相应的p1p2的{​​{1}}集

bSet

答案 1 :(得分:0)

这就是我所做的,对我有用

val as=all.map( a=> ((a.name.get ++ a.someOtherName.get),a)).toMap
val result=smallerSet.map (a =>  as.get(a.id))