2013-07-01 101 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集合,它们可能会保持良好。

相关问题