我应该使用咖喱功能吗?

时间:2012-08-13 02:06:53

标签: scala

我有这段代码:

val chunks = blob.map(_.id).distinct.grouped(100).toSeq 
val output = (for (chunk <- chunks) yield { 
  MyDataStore.batchGet("tablez", chunk.asJava, classOf[TableZ], true).asScala }).flatten

我想将此转换为通用方法,该方法采用参数blob.map(_.id).distinctMyDataStore.batchGet("tablez", chunk.asJava, classOf[TableZ], true).asScala

我在考虑可能是函数但不确定语法。

为了澄清,chunksSeq[Seq[String]]batchGet返回List[T],其中TtablezoutputSeq[TableZ]

1 个答案:

答案 0 :(得分:2)

我认为以下内容可行:

def getInGroups[T,U](ids: Seq[T], groupSize: Int = 100)(getter: Seq[T] => Seq[U]): Seq[U] = {
   ids.grouped(groupSize).flatMap{ chunk =>  getter(chunk) }.toSeq
}

将其命名为

getInGroups(blob.map(_.id).distinct){ chunk => 
   MyDataStore.batchGet("tablez", chunk.asJava, classOf[TableZ], true).asScala
}