Scala从复杂类型中收集元素

时间:2014-07-17 14:02:28

标签: scala

我有两个包含String作为键的Map和一个特定对象类型的List作为值。

val map1 = Map[String, List[TypeA]]
val map2 = Map[String, List[TypeA]]

TypeA定义为:

case class TypeA(String, TypeB)

trait TypeB
case class LowerB(value: Integer) extends TypeB
case class UpperB(value: Integer) extends TypeB

我需要的是找到所有TypeB对象,其LowerB值大于上面定义的Map中每个String键的UpperB值。我有一个模糊的想法,如何做到这一点,但不知何故搞乱了返回类型:

  1. 检查map1和map2是否为空
  2. map1.map和map1中的每个键,从map2
  3. 获取值
  4. 压缩map1和map2值并收集所有大于UpperB的LowerB
  5. 问题在于,在第2步,我应该怎么做案例无?这会弄乱我的回报类型。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

你可以实现第2步,以及像这样的zip值:

val r = map1.map{ case (k1, v1) => v1 zip map2.getOrElse(k1, List[TypeA]()) }

// returns Iterable[List[(TypeA, TypeA)]]