我有一个类型为的映射映射<布尔值,映射<字符串,字符串>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
原因可能是什么??我认为我已经正确地创建了地图。
- 不要在嵌套循环中使用隐式
it
变量 - 不要在调试输出中使用字符串串联,而是使用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",
])