在Java过去10年以及Groovy的最后一年里,我是Scala的新成员。嗨斯卡拉!
对于我的生活,我似乎无法获得以下代码片段进行编译,其只是复杂到足以让Google Gods无法帮助我。
我有一个地图,其中包含键的字符串和值的元组列表。元组将是一个String-Long对。在Groovy中,这看起来像:
Map<String,List<Tuple2<String,Long>>> data = [:]
我需要能够为此地图添加和修改键和值。具体来说,我需要:
在Groovy中,这看起来像:
Map<String,List<String,Long>> data = [:]
def addData(String key, String message) {
Long currTime = System.currentTimestampInMillis()
Tuple2<String,Long> tuple = new Tuple2<String,Long>(message, tuple)
if(data.contains(key)) {
data.key << tuple
} else {
data[key] = new List<Tuple2<String,Long>>()
data.key << tuple
}
}
我在Scala尝试这样做,虽然没有成功。
迄今为止我最好的尝试:
object MapUtils {
// var data : Map[String,ListBuffer[(String,Long)]] = Map()
val data = collection.mutable.Map[String, ListBuffer[(String, Long)]]()
def addData(key : String, message : String) : Unit = {
val newTuple = (message, System.currentTimeMillis())
val optionalOldValue = data.get(key)
optionalOldValue match {
case Some(olderBufferList) => olderBufferList += newTuple
case None => data
.put(key, ListBuffer[(String, Long)](newTuple))
}
}
}
在case Some(olderBufferList) => olderBufferList += newTuple
行上抱怨此编译器错误:
value += is not a member of Any
我有什么想法可以做这个编译&amp;工作
答案 0 :(得分:1)
您需要的简短版本将是:
val map = mutable.Map[String, ListBuffer[(String, Long)]]()
map.put(key, map.getOrElse(key, ListBuffer[(String, Long)]()) += ((message, System.currentTimeMillis())))
您的代码存在一些语法问题,如果我尝试更改addData,它将如下所示:
def addData(key : String, message : String) : Unit = {
val newTuple = (message, System.currentTimeMillis())
val optionalOldValue = map.get(key)
optionalOldValue match {
case Some(olderBufferList) => olderBufferList += newTuple
case None => map.put(key, ListBuffer[(String, Long)](newTuple))
}
}
答案 1 :(得分:1)