Advertisement
Guest User

Untitled

a guest
Mar 16th, 2015
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 0.96 KB | None | 0 0
  1. trait MultiMap[A, B] extends mutable.MultiMap[A, B] {
  2.   def foreachBinding(f: ((A, B)) => Unit): Unit =
  3.     this.foreach {
  4.       case (key, values) =>
  5.         values.foreach { value =>
  6.           f((key, value))
  7.         }
  8.     }
  9.  
  10.   def partitionByBindings(
  11.     f: ((A, B)) => Boolean
  12.   ): (mutable.MultiMap[A, B], mutable.MultiMap[A, B]) = {
  13.     val truePairs = MultiMap[A, B]()
  14.     val falsePairs = MultiMap[A, B]()
  15.  
  16.     this.foreachBinding {
  17.       case binding @ (key, value) =>
  18.         if (f(binding))
  19.           truePairs.addBinding(key, value)
  20.         else
  21.           falsePairs.addBinding(key, value)
  22.     }
  23.  
  24.     (truePairs, falsePairs)
  25.   }
  26. }
  27.  
  28. object MultiMap {
  29.   def empty[A, B]: MultiMap[A, B] =
  30.     new mutable.HashMap[A, mutable.Set[B]] with MultiMap[A, B]
  31.  
  32.   def apply[A, B](elems: (A, B)*): MultiMap[A, B] = {
  33.     val result = empty[A, B]
  34.     elems.foreach {
  35.       case (key, value) => result.addBinding(key, value)
  36.     }
  37.     result
  38.   }
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement