Если я правильно понимаю ваше требование, то что-то вроде ниже должно получить то, что вы хотите:
def combineClosestKeys[V](m1: Map[Long, V], m2: Map[Long, V], m3: Map[Long, V]) = {
def closest(x: Long, s: Iterable[Long]) = s.minBy(e => math.abs(e - x))
m1.map{ case (k, v) =>
(k, v :: m2(closest(k, m2.keys)) :: m3(closest(k, m3.keys)) :: Nil)
}
}
Обратите внимание, что в приведенном выше методе предполагается, что указанные Map
не являются пустыми.
Используя метод:
val mapA = Map(123L -> (1.2, 1.3), 567L -> (2.4, 2.6), 1200L -> (3.6, 5.9))
val mapB = Map(125L -> (1.22, 1.33), 570L -> (2.44, 2.66), 1205L -> (3.66, 5.99))
val mapC = Map(128L -> (1.222, 1.3333), 575L -> (2.444, 2.666), 1208L -> (3.666, 5.999))
combineClosestKeys(mapA, mapB, mapC)
// res1: scala.collection.immutable.Map[Long,List[(Double, Double)]] = Map(
// 123 -> List((1.2,1.3), (1.22,1.33), (1.222,1.3333)),
// 567 -> List((2.4,2.6), (2.44,2.66), (2.444,2.666)),
// 1200 -> List((3.6,5.9), (3.66,5.99), (3.666,5.999))
// )