У меня есть два Map[String, T]
s, где T
является экземпляром подтипа Fruit
. Мне нужно построить новую карту с двух карт, где ключ - это общие имена ключей из двух карт, а значение - Seq[Fruit]
, если значения из двух карт имеют один и тот же тип.scala: type равенство двух переменных
class Fruit
case class Apple() extends Fruit
case class Banana(num: Int) extends Fruit
case class Orange() extends Fruit
Например, если у меня есть следующие две карты:
val map1 = Map("first" -> Apple(),
"second" -> Banana(3),
"third" -> Orange())
val map2 = Map("first" -> Orange(),
"second" -> Banana(4),
"third" -> Orange())
Мне нужно результирующую карту, map3
который имеет следующие члены:
generateMap(map1: Map[String, Fruit], map2: Map[String, Fruit]): Map[String, Seq[Fruit]]
=> results a map look like
Map("second" -> Seq(Banana(3), Banana(4)),
"third" -> Seq(Orange(), Orange())
Я не знаю, как написать функцию, generateMap
. Может ли кто-нибудь помочь мне реализовать это? (используя Scala 2.11.x)
Обратите внимание, что определения классов (Фрукты и другие) фиксированы, поэтому я не могу их модифицировать.
спасибо, но результат отличается от того, что я ожидал. Поскольку map1 («first») имеет другой тип из map2 («first»), сгенерированный вывод не должен иметь «первый». – cinsk
Хорошо, я отредактирую свой ответ, чтобы отфильтровать эти значения. – ipoteka