我要做的是抓取任何可能是DECIMAL *
的东西columnTypeMap.getOrElse("DECIMAL", Nil)
我不想硬编码:
columnTypeMap.getOrElse("DECIMAL", Nil):::
columnTypeMap.getOrElse("DECIMAL(14,2)", Nil)
数据:
columnTypeMap: Map[String,List[Int]] = Map(DECIMAL(14,2) -> List(93, 98, 103, 125, 133, 145), DECIMAL(12,0) -> List(2), DECIMAL(6,3) -> List(110), DECIMAL(6,0) -> List(84), DECIMAL(13,2) -> List(104), DECIMAL(10,2) -> List(120), DECIMAL(10,0) -> List(74)
我不确定如何在这种情况下使用通配符或在.getOrElse等语句中进行模式匹配
答案 0 :(得分:3)
您正在寻找收集和开始使用:
scala> val map = Map(
| "DECIMAL(14,2)" -> List(1),
| "NOT_DECIMAL(12,0)" -> List(2),
| "DECIMAL(6,3)" -> List(3),
| "DECIMAL(6,0)" -> List(4))
map: scala.collection.immutable.Map[String,List[Int]] = Map(DECIMAL(14,2) -> List(1), NOT_DECIMAL(12,0) -> List(2), DECIMAL(6,3) -> List(3), DECIMAL(6,0) -> List(4))
scala> map collect {
| case (key, value) if key startsWith "DECIMAL" => value
| }
res0: scala.collection.immutable.Iterable[List[Int]] = List(List(1), List(3), List(4))
请记住,这些将遍历地图中的所有值。如果您需要更高的性能,则应使用trie。
答案 1 :(得分:2)
您可以使用scala标准库附带的TreeMap数据结构来实现此目的:
scala> import scala.collection.immutable._
scala> val map = TreeMap(
| "DECIMAL(14,2)" -> List(1),
| "NOT_DECIMAL(12,0)" -> List(2),
| "DECIMAL(6,3)" -> List(3),
| "DECIMAL(6,0)" -> List(4))
map: scala.collection.immutable.TreeMap[String,List[Int]] = Map(DECIMAL(14,2) -> List(1), DECIMAL(6,0) -> List(4), DECIMAL(6,3) -> List(3), NOT_DECIMAL(12,0) -> List(2))
scala> map.range("DECIMAL", "DECIMAM")
res5: scala.collection.immutable.TreeMap[String,List[Int]] = Map(DECIMAL(14,2) -> List(1), DECIMAL(6,0) -> List(4), DECIMAL(6,3) -> List(3))