Skip to content

Commit ecfdfdf

Browse files
SCALA-282: Merge two maps in Scala (#503)
1 parent a0e5595 commit ecfdfdf

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.baeldung.scala.mergemaps
2+
3+
object CombineIterables {
4+
5+
def combineIterables[K, V](
6+
a: Map[K, Iterable[V]],
7+
b: Map[K, Iterable[V]]
8+
): Map[K, Iterable[V]] = {
9+
a ++ b.map { case (k, v) => k -> (v ++ a.getOrElse(k, Iterable.empty)) }
10+
}
11+
12+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.baedung.scala.mergemaps
2+
3+
import com.baeldung.scala.mergemaps.CombineIterables
4+
import org.scalatest.{FlatSpec, Matchers}
5+
6+
class MergeMapsUnitTest extends FlatSpec with Matchers {
7+
8+
"++ operator" should "merge maps preferring duplicates from second map" in {
9+
val firstMap = Map(1 -> "Apple", 5 -> "Banana", 3 -> "Orange");
10+
val secondMap = Map(5 -> "Pear", 4 -> "Cherry");
11+
12+
firstMap ++ secondMap should equal(
13+
Map(1 -> "Apple", 5 -> "Pear", 3 -> "Orange", 4 -> "Cherry")
14+
)
15+
}
16+
17+
"combineIterables" should "combine values for duplicate keys" in {
18+
val firstMap = Map(1 -> List(1, 2, 3))
19+
val secondMap = Map(1 -> List(4, 5))
20+
21+
CombineIterables.combineIterables(firstMap, secondMap) should equal(
22+
Map(1 -> List(4, 5, 1, 2, 3))
23+
)
24+
}
25+
}

0 commit comments

Comments
 (0)