Sumit Paliwal
Sumit Paliwal

Reputation: 395

Joining two lists with common elements - Scala

I have 2 Lists as mentioned below:

val L1 = List[(Int,Int,String)]
val L2 = List[(Int,Int,String)]

I want to join these 2 lists on the basis of 1st and 2nd Int element in a way that result list must have 4 elements (Int,Int,String,String).

val joinedList = List[(Int, Int, String, String)]

where last 2 String elements will be string from L1 and string from L2.

Ex:-

val L1 = List((1,1,"one"), (2,2,"two"))
val L2 = List((2,2,"twice"), (3,3,"thrice"))

Output List ->

val joinedList = List((1,1,"one","--"),(2,2,"two","twice"), (3,3,"--","thrice"))

Kindly suggest a way to achieve that in scala.

Upvotes: 1

Views: 2546

Answers (1)

Karl Bielefeldt
Karl Bielefeldt

Reputation: 49008

First you want to get it into Maps, so it's easier to look up, then you can just map over all the keys:

val L1Map = L1.map{case (x,y,z) => ((x,y) -> z)}.toMap
val L2Map = L2.map{case (x,y,z) => ((x,y) -> z)}.toMap
val allKeys = L1Map.keySet ++ L2Map.keySet

val result = allKeys map {case (x,y) =>
  (x, y, L1Map.getOrElse((x,y), "--"), L2Map.getOrElse((x,y), "--"))
}

That gives you an unsorted Set as a result. If you need a List, you can convert it back and sort it as necessary.

Upvotes: 3

Related Questions