blob: b7f187880cb2be029fda2a44486c18c21a6e5978 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
package kamon.util
object MapMerge {
/**
* Merge to immutable maps with the same key and value types, using the provided valueMerge function.
*/
implicit class Syntax[K, V](val map: Map[K, V]) extends AnyVal {
def merge(that: Map[K, V], valueMerge: (V, V) ⇒ V): Map[K, V] = {
val merged = Map.newBuilder[K, V]
map.foreach {
case (key, value) ⇒
val mergedValue = that.get(key).map(v ⇒ valueMerge(value, v)).getOrElse(value)
merged += key -> mergedValue
}
that.foreach {
case kv @ (key, _) if !map.contains(key) ⇒ merged += kv
case other ⇒ // ignore, already included.
}
merged.result();
}
}
}
|