Groovy中存储多组键值对及遍历唯一店铺的方法咨询
Groovy 存储多组店铺-地址键值对及遍历方法
问题原因
你之前的代码每次都将mapAddress重新赋值为新的Map对象,直接覆盖了之前的记录;而且Groovy的Map并没有append方法,这行代码完全无效。要存储多组数据,需要用集合类型容纳多个Map,或者直接用店铺名作为键构建Map(更适合保证店铺唯一性)。
正确存储方式
方式1:用List存储多个店铺-地址Map
适合需要保留重复店铺记录的场景(若不需要重复,后续可去重):
// 初始化空列表 def storeAddresses = [] // 添加第一组数据 storeAddresses << [store: "abc", addr: "123 street"] // 添加第二组数据 storeAddresses << [store: "xyz", addr: "north street"]
方式2:用店铺名作为键的Map(推荐,天然保证店铺唯一性)
如果店铺名是唯一标识,直接用店铺名作为Map的键、地址作为值,重复添加同一家店铺时会自动覆盖旧地址,契合你“唯一的店铺”需求:
// 初始化空Map def storeAddressMap = [:] // 添加店铺abc的地址 storeAddressMap["abc"] = "123 street" // 添加店铺xyz的地址(也可用点语法,前提是店铺名是合法标识符) storeAddressMap.xyz = "north street"
遍历唯一店铺的方法
针对List存储的情况
先提取所有店铺名并去重,再遍历:
// 获取所有唯一店铺名 def uniqueStores = storeAddresses.collect { it.store }.unique() // 遍历每个唯一店铺 for (store in uniqueStores) { // 找到对应地址 def address = storeAddresses.find { it.store == store }.addr println "店铺:${store},地址:${address}" }
针对店铺名为键的Map的情况
遍历更直接,因为键本身就是唯一店铺名:
// 用for循环遍历 for (entry in storeAddressMap) { println "店铺:${entry.key},地址:${entry.value}" } // 或者用Groovy更简洁的each方法 storeAddressMap.each { store, addr -> println "店铺:${store},地址:${addr}" }
内容的提问来源于stack exchange,提问作者user3092856
相关产品推荐
相关产品推荐

