Scala - как вызвать метод, который ожидает карту - PullRequest
0 голосов
/ 02 мая 2018

У меня есть метод скала:

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

TopicPartition - это класс с 2 параметрами (String и Int):
TopicPartition(java.lang.String topic, int partition).
Сделать это в скале так:

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


OffsetAndMetadata - это общедоступный класс kafka с типом long:
OffsetAndMetadata​(long offset)

Как теперь вызвать метод commitSync с этими 2 параметрами?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Создать карту в вызове функции:

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)
0 голосов
/ 02 мая 2018

Допустим, вы объявляете два класса case

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

Теперь вы создаете карту с этими значениями

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

Теперь вы можете вызывать вашу функцию commitSync как

commitSync(offsets)

Надеюсь, это ответит на ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...