2013-07-01 138 views
0

fig如何在scala中將新緩衝區合併到舊緩衝區中?

我嘗試在刷新時將新數據合併到舊緩衝區。

更新或插入是accroding「id」attr。

有人能告訴我如何在Scala中做到這一點?

def merge(oldBuf: Buffer[java.util.Map[String, Value]], newBuf: Buffer[java.util.Map[String, Value]]) { 
     // loop newBuffer{ 
      // val item = newBuf(n) 
      // val id = item.get("id") 
      // if same id found in oldBuf: 
      // update new [Value] to the old item in oldBuf 
      // else (can not found this id in oldBuf) 
      // add this new item to oldBuf 
     //} 
      return oldBuf 
} 
+0

請添加'緩衝區'的來源。緩衝區是否真的通過Java Map來參數化?是否有使用Java的Map的理由? – Beryllium

+0

這兩個Buffer的長度是否相同,並且元素是否對齊,以便newBuffer(0)在評估是否應該更新或插入整個舊的時候只需要查看oldBuffer(0)每次迭代newBuffer都需要掃描緩衝區? – cmbaxter

+0

oldBuf和newBuf長度不同,使用Java Map cas有java方法返回 – toughtalker

回答

0

如果你想使用Java的Map,然後嘗試putAll

import java.util 

object Buf extends App { 
    val oldBuf = new util.HashMap[Int, String]() 
    oldBuf.put(1, "1") 
    oldBuf.put(2, "2") 
    oldBuf.put(3, "3") 
    oldBuf.put(4, "4") 

    val newBuf = new util.HashMap[Int, String]() 
    newBuf.put(4, "4 new") 
    newBuf.put(5, "5") 

    oldBuf.putAll(newBuf) 
    println(oldBuf) 
} 

如果你有斯卡拉Map

import scala.collection._ 

val oldBuf = mutable.Map("a" -> 1, "b" -> 2) 
val newBuf = immutable.Map("a" -> 3, "c" -> 4) 

oldBuf ++= newBuf 

所以沒有區別。

一般來說,我建議將任何Java集合轉換爲Scala集合,然後開始在Scala中處理(如果您的長期目標是要替換所有Java代碼)。如果您在算法中使用Scala中的Java集合,它們可能會保持良好。

相關問題