diff options
author | Ivan Topolnjak <ivantopo@gmail.com> | 2015-01-29 03:42:27 +0100 |
---|---|---|
committer | Ivan Topolnjak <ivantopo@gmail.com> | 2015-01-29 03:42:27 +0100 |
commit | 75bd9503aebee628da394a935816991e7a790092 (patch) | |
tree | f4df3333826cec805fadc14894579f1bc1054279 /kamon-core/src/main/scala/kamon/util/MapMerge.scala | |
parent | 61089a75240f5cc21b056087f1d633dd31981c61 (diff) | |
parent | 9839db9d46312435822b6b5faffbbc445af80077 (diff) | |
download | Kamon-75bd9503aebee628da394a935816991e7a790092.tar.gz Kamon-75bd9503aebee628da394a935816991e7a790092.tar.bz2 Kamon-75bd9503aebee628da394a935816991e7a790092.zip |
Merge branch 'wip/improve-metric-recorders-infrastructure'
Conflicts:
kamon-system-metrics/src/main/scala/kamon/system/SystemMetricsCollector.scala
Diffstat (limited to 'kamon-core/src/main/scala/kamon/util/MapMerge.scala')
-rw-r--r-- | kamon-core/src/main/scala/kamon/util/MapMerge.scala | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/kamon-core/src/main/scala/kamon/util/MapMerge.scala b/kamon-core/src/main/scala/kamon/util/MapMerge.scala new file mode 100644 index 00000000..b7f18788 --- /dev/null +++ b/kamon-core/src/main/scala/kamon/util/MapMerge.scala @@ -0,0 +1,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(); + } + } + +} |