Guest User

Untitled

a guest
Jan 23rd, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.19 KB | None | 0 0
  1. package org.scalatra.util
  2.  
  3. import scala.collection.generic.CanBuildFrom
  4. import scala.collection.immutable.{HashMap, Map, MapLike}
  5. import scala.collection.mutable.{Builder, MapBuilder}
  6.  
  7. class MultiMap
  8. extends HashMap[String, Seq[String]]
  9. with MapLike[String, Seq[String], MultiMap]
  10. with MapWithIndifferentAccess[Seq[String]]
  11. {
  12. override def get(key: String): Option[Seq[String]] =
  13. (super.get(key) orElse super.get(key + "[]"))
  14.  
  15. override def default(key: String): Seq[String] = Seq.empty
  16.  
  17. override def empty: MultiMap = MultiMap.empty
  18. }
  19.  
  20. object MultiMap {
  21. def apply(elems: (String, Seq[String])*): MultiMap = (newBuilder ++= elems).result
  22. def apply(map: scala.collection.Map[String, Seq[String]]): MultiMap =
  23. apply(map.toSeq:_*)
  24.  
  25. def newBuilder: Builder[(String, Seq[String]), MultiMap] =
  26. new MapBuilder[String, Seq[String], MultiMap](empty)
  27.  
  28. implicit def canBuildFrom: CanBuildFrom[Map[String, Seq[String]], (String, Seq[String]), MultiMap] = {
  29. new CanBuildFrom[Map[String, Seq[String]], (String, Seq[String]), MultiMap] {
  30. def apply(from: Map[String, Seq[String]]) = newBuilder
  31.  
  32. def apply() = newBuilder
  33. }
  34. }
  35. def empty = new MultiMap
  36. }
Add Comment
Please, Sign In to add comment