在groovy中迭代map的map



我有一个类型为的映射映射<布尔值,映射<字符串,字符串>gt;

我怎样才能对它们进行迭代。我已经编写了以下代码,但在groovy中还有更好的方法吗?

getTopic(boolean boo){
...
}
def test = { jsonMap ->
jsonMap.each {
def topic = it.getKey()
it.getValue().each{
println(topic+" "+" "+it.getKey()+" "+it.getValue())
}
println "Message sent for cluster " + it.getKey()
}
}
groovy.lang.MissingMethodException: No signature of method: java.lang.Boolean.plus() is applicable for argument types: (String) values: [ ]
Possible solutions: is(java.lang.Object), split(groovy.lang.Closure), use([Ljava.lang.Object;), wait(), any(), dump()

更新

def prod = new KafkaProducer([
ProducerConfig.BOOTSTRAP_SERVERS_CONFIG       : "host",
ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG  : "org.apache.kafka.common.serialization.StringSerializer",
ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG    : "org.apache.kafka.common.serialization.StringSerializer",
ProducerConfig.ACKS_CONFIG                    : "all"
])

在创建这个地图时,我得到了

Unexpected input: ':' @ line 15, column 55.
OOTSTRAP_SERVERS_CONFIG       : "hos

原因可能是什么??我认为我已经正确地创建了地图。

  1. 不要在嵌套循环中使用隐式it变量
  2. 不要在调试输出中使用字符串串联,而是使用GString插值

我会开始重写你的代码,所以:

def test = { jsonMap ->
jsonMap.each{ topic, topicMap ->
topicMap.each{
println "$topic $it.key $it.value" // here it's ok to use "it"
}
println "Message sent for cluster $topic"
}
}

更新的答案:

如果你想在Map literal中使用常量作为键,你必须把它们放在括号():中

def prod = new KafkaProducer([
(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG)       : "host",
(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG)  : "org.apache.kafka.common.serialization.StringSerializer",
])

最新更新