Scala - 如何调用需要Map

时间:2018-05-02 11:06:25

标签: scala hashmap

我有一个scala方法:

def commitSync(offsets: Map[TopicPartition, OffsetAndMetadata]) = {
   consumer.commitSync(offsets.asJava)
}

TopicPartition是一个包含2个参数的类(StringInt):
TopicPartition(java.lang.String topic, int partition)
用这样的scala制作它:

val tp = new TopicPartition("sometopicname", 99)


OffsetAndMetadata是公共kafka类,其类型为“long”:
OffsetAndMetadata​(long offset)

现在如何使用这两个参数调用方法commitSync

感谢。

2 个答案:

答案 0 :(得分:1)

让我们说你宣布两个案例类

case class TopicPartition(str:String,intVal:Int)
case class OffsetAndMetadata(longVal:Long)

现在您使用这些值创建地图

val offsets = Map(TopicPartition("sometopicname", 99) -> OffsetAndMetadata(999999))

现在可以将函数commitSync称为

commitSync(offsets)

我希望这能回答你的问题。

答案 1 :(得分:1)

在函数调用中创建一个Map:

def commitSync(input: Map[String, Int]) = ??? // whatever

commitSync(Map("my string" -> 10))

或者,您可以将地图定义为val并将其作为参数传递。

val map = Map("my string" -> 10)

commitSync(map)

特别是在你的例子中,这样的东西可以起作用:

case class TopicPartition(val1: String, val2: Int)
case class OffsetAndMetadata(val1: Long)

def commitSync(input: Map[TopicPartition, OffsetAndMetadata]) = ??? // whatever

val map = Map(TopicPartition("string", 123) -> OffsetAndMetadata(1234567890))

commitSync(map)