gpt4 book ai didi

map - 如何在不覆盖当前条目的情况下添加多个 Groovy 映射条目?

转载 作者:行者123 更新时间:2023-12-04 11:09:40 33 4
gpt4 key购买 nike

我对 Groovy Maps 的问题。我一直在寻找一种以编程方式将新条目添加到 Groovy 映射而不覆盖当前条目的方法。例如

def editsMap = [:]

lineEdits.flag.each
{ lineEdits_Flag ->
editsMap.put('FlagId',lineEdits_Flag.id)
editsMap.put('FlagMnemonic',lineEdits_Flag.mnemonic)
editsMap.put('Action',lineEdits_Flag.action)
println "editsMap: ${editsMap}"
}

第一遍生成此 map :
editsMap: [FlagId:10001, FlagMnemonic:TRA, Action:review]

但是第二遍覆盖了第一遍:
editsMap: [FlagId:10002, FlagMnemonic:REB, Action:deny]

我想要做的是在一张 map 中创建多个条目。我需要我的 map 来填充这样的东西:
editsMap: [FlagId:10001, FlagMnemonic:TRA, Action:review]
editsMap: [FlagId:10002, FlagMnemonic:REB, Action:deny]
editsMap: [FlagId:10003, FlagMnemonic:UNB, Action:deny]
editsMap: [FlagId:20001, FlagMnemonic:REB, Action:deny]
editsMap: [FlagId:20002, FlagMnemonic:ICD, Action:review]
editsMap: [FlagId:30001, FlagMnemonic:REB, Action:deny]
editsMap: [FlagId:40001, FlagMnemonic:ICD, Action:review]
editsMap: [FlagId:40002, FlagMnemonic:MPR, Action:review]
editsMap: [FlagId:50001, FlagMnemonic:CPT, Action:deny]
editsMap: [FlagId:60001, FlagMnemonic:DTU, Action:deny]
editsMap: [FlagId:70001, FlagMnemonic:ICD, Action:review]
editsMap: [FlagId:70002, FlagMnemonic:MPR, Action:review]

填充 map 后,我需要能够找到某些值才能处理消息。我相信我可以使用类似的东西:
def thisValue = appliedEditsMap[FlagId, '10001'] ?: "default"

进行快速查找。

有人可以帮助我了解如何以编程方式向 Groovy map 添加值而不覆盖 map 中已有的值吗?

最佳答案

你想要类似 Guava's MultiMap 的东西:

Multimap<String, String> myMultimap = ArrayListMultimap.create();

// Adding some key/value
myMultimap.put("Fruits", "Bannana");
myMultimap.put("Fruits", "Apple");
myMultimap.put("Fruits", "Pear");
myMultimap.put("Vegetables", "Carrot");

// Getting values
Collection<string> fruits = myMultimap.get("Fruits");
System.out.println(fruits); // [Bannana, Apple, Pear]

This guy对 Multimap 进行纯 Groovy 模拟:
class GroovyMultimap {
Map map = [:]

public boolean put(Object key, Object value) {
List list = map.get(key, [])
list.add(value)
map."$key" = list
}
}

您可以使用 putAtgetAt用于映射操作中的语法糖。你也可以试试 mixin在 map 对象中。

他还将 Groovy 与 Guava 的 multimap 结合使用:
List properties = ['value1', 'value2', 'value3']
Multimap multimap = list.inject(LinkedListMultimap.create()) {
Multimap map, object ->
properties.each {
map.put(it, object."$it")
}
map
}
properties.each {
assertEquals (multimap.get(it), list."$it")
}

关于map - 如何在不覆盖当前条目的情况下添加多个 Groovy 映射条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15640525/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com