Coleções Scala, valores múltiplos de chave única
Eu tenho uma lista de chaves pai, cada qual poderia ter zero ou mais valores associados. Não tenho certeza de qual coleção usar.
estou usandoMap[Int,List[String]]
Eu estou declarando o mapa como
<code>var nodes = new HashMap[Int, List[String]] </code>
Então eu tenho dois métodos para lidar com a adição de novos elementos. O primeiro é adicionar novas chavesaddNode
e o segundo é adicionar novos valoresaddValue
. Inicialmente, a chave não terá nenhum valor associado a ela. Mais tarde, durante a execução, novos valores serão associados.
<code>def addNode(key: Int) = nodes += (key -> "") def addValue(key: Int, value: String) = ??? </code>
Não tenho certeza de como implementaraddValues
Em resposta à resposta @ oxbow-lakes, este é o erro que estou recebendo. Por favor, note que as chaves não precisam ter valores associados a elas.
<code>scala> var nodes = Map.empty[Int, List[String]] nodes: scala.collection.immutable.Map[Int,List[String]] = Map() scala> nodes += (1->null) scala> nodes += (1 -> ("one" :: (nodes get 1 getOrElse Nil))) java.lang.NullPointerException at .<init>(<console>:9) at .<clinit>(<console>) at .<init>(<console>:11) at .<clinit>(<console>) at $print(<console>) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:704) at scala.tools.nsc.interpreter.IMain$Request$$anonfun$14.apply(IMain.scala:920) at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:43) at scala.tools.nsc.io.package$$anon$2.run(package.scala:25) at java.lang.Thread.run(Thread.java:680) </code>Atualização 2:
O problema com o código acima é a linhanodes += (1->null)
a chave deve ser associada comNil
em vez de. Abaixo está o código de trabalho.
<code>scala> var nodes = Map.empty[Int, List[String]] nodes: scala.collection.immutable.Map[Int,List[String]] = Map() scala> nodes += (1->Nil) scala> nodes += (1 -> ("one" :: (nodes get 1 getOrElse Nil))) scala> nodes res27: scala.collection.immutable.Map[Int,List[String]] = Map(1 -> List(one)) </code>