Вы можете следовать этому подходу для получения желаемого результата.
Допустим, у вас есть ввод в следующем формате.
val map1: Map[String, List[Int]] = Map(
"A"->List(1,2,3),
"B"->List(2,4),
"C"->List(4,5),
"D"->List(7,8,9),
"E"->List(8,9),
"F"->List(4,5,7)
)
Чтобы получить уникальные значения, мы конвертируем Список значений в набор, чтобы получить пересечение между значениями
val map2 = map1.map(x => (x._1,x._2.toSet))
val result: Map[List[String], Set[Int]] =
for(a <- map2;
b <- map2 if( (a._1!=b._1) && (a._2 intersect b._2).nonEmpty))
yield( List(a._1,b._1) -> (a._2 intersect b._2) )
Эта функция выдаст вам результат как
result: Map[List[String],Set[Int]] = Map(List(D, F) -> Set(7), List(C, F) -> Set(4, 5), List(E, D) -> Set(8, 9), List(B, C) -> Set(4), List(B, A) -> Set(2), List(A, B) -> Set(2), List(F, C) -> Set(4, 5), List(C, B) -> Set(4), List(D, E) -> Set(8, 9), List(F, D) -> Set(7), List(F, B) -> Set(4), List(B, F) -> Set(4))
Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы относительно этого подхода. Спасибо