Questa riga: var counter : Integer = jm.get(ls)
nel seguente codice restituisce un numero intero di valore 0 quando deve essere nullo. Perché sta succedendo?get metodo di hashmap non restituisce null
In base alla documentazione, il metodo get di HashMap restituisce null se l'elemento non viene trovato. Il codice qui sotto sta contando il numero di elementi in una lista
import scala.collection.JavaConversions._
object Tester {
def main(args: Array[String]) {
var listOfLinks : java.util.Set[String] = new java.util.TreeSet[String]
listOfLinks.add("1")
listOfLinks.add("1")
listOfLinks.add("1")
listOfLinks.add("2")
listOfLinks.add("3")
listOfLinks.add("3")
listOfLinks.add("3")
listOfLinks.add("3")
var l: java.util.List[String] = new java.util.ArrayList[String]
var jm: java.util.Map[String, Int] = new java.util.HashMap[String, Int];
for (ls <- listOfLinks) {
var counter : Integer = jm.get(ls)
if (counter == null) {
jm.put(ls, 1)
} else {
counter = counter + 1
jm.put(ls, counter)
}
}
for(jmv <- jm){
println(jmv._1+" , "+jmv._2)
}
}
}
Questa è solo una congettura, ma io * penso * che il valore predefinito di 'Int' in Scala sia 0, non' null'. Anche 'null.asInstanceOf [Int]' restituisce '0'. Quindi, quando il valore non viene trovato, 'null' cambia in' 0' ... –
Non è direttamente correlato alla tua domanda, ma se hai bisogno di contare le occorrenze di elementi in una lista dai un'occhiata a [questa discussione] (http://stackoverflow.com/questions/11448685/scala-how-can-i-count-the-number-of-occurrences-in-a-list) – mariosangiorgio
Sopra il codice, anche se io uso 'Int' invece di 'String' in' jm', funziona ancora. 'jm.get (1)' mi restituisce '0'. Come sta prendendo jm Int quando si tratta di una HashMap di String, Int – Jatin