Groovy收集(?)变量和值来映射
问题描述:
我正在研究一段依赖于从Java继承的'字段'中的值的Groovy脚本。我需要能够引用这个字段列表(和值)来创建一个可以使用的地图。我正在用这种“常规”方式挣扎。Groovy收集(?)变量和值来映射
我有什么访问(继承):
dialogPartyASelection_7 = 'Denied'
dialogPartyBSelection_7 = 'Accepted'
dialogPartyASelection_6 = 'Denied'
dialogPartyBSelection_6 = 'Accepted'
dialogPartyBSelection_5 = 'Denied'
dialogPartyASelection_5 = 'Accepted'
dialogPartyBSelection_4 = 'Denied'
dialogPartyASelection_4 = 'Accepted'
dialogPartyBSelection_3 = 'Denied'
dialogPartyASelection_3 = 'Accepted'
dialogPartyBSelection_2 = 'Denied'
dialogPartyASelection_2 = 'Accepted'
dialogPartyBSelection_1 = 'Denied'
dialogPartyASelection_1 = 'Accepted'
我试图让:
map = [
'dialogPartyASelection_7' : 'Denied',
'dialogPartyBSelection_7' : 'Accepted',
'dialogPartyASelection_6' : 'Denied',
'dialogPartyBSelection_6' : 'Accepted',
'dialogPartyBSelection_5' : 'Denied',
'dialogPartyASelection_5' : 'Accepted',
'dialogPartyBSelection_4' : 'Denied',
'dialogPartyASelection_4' : 'Accepted',
'dialogPartyBSelection_3' : 'Denied',
'dialogPartyASelection_3' : 'Accepted',
'dialogPartyBSelection_2' : 'Denied',
'dialogPartyASelection_2' : 'Accepted',
'dialogPartyBSelection_1' : 'Denied',
'dialogPartyASelection_1' : 'Accepted' ]
我“设置我自己了”,如下所示(这些列表会在整个脚本被重新使用)
def selectionsPartyA = [], selectionsPartyB = [], selections = [], PostSelections = [], PostChildrenSelections = [],
PostSelections = [
'7',
'6',
'5',
'4',
'3',
'2',
'1'
]
// selectionsPartyA
for (post in PostSelections) {
selectionsPartyA += "dialogPartyASelection_"+post
}
// selectionsPartyB
for (post in PostSelections) {
selectionsPartyB += "dialogPartyBSelection_"+post
}
selections.addAll(selectionsPartyB)
selections.addAll(selectionsPartyA)
我已经尝试迭代使用引用列表,但无法引用如预期的'领域'或'价值'。
答
是这样的?
class Test {
String dialogPartyASelection_7 = 'Denied'
String dialogPartyBSelection_7 = 'Accepted'
String dialogPartyASelection_6 = 'Denied'
String dialogPartyBSelection_6 = 'Accepted'
String dialogPartyBSelection_5 = 'Denied'
String dialogPartyASelection_5 = 'Accepted'
String dialogPartyBSelection_4 = 'Denied'
String dialogPartyASelection_4 = 'Accepted'
String dialogPartyBSelection_3 = 'Denied'
String dialogPartyASelection_3 = 'Accepted'
String dialogPartyBSelection_2 = 'Denied'
String dialogPartyASelection_2 = 'Accepted'
String dialogPartyBSelection_1 = 'Denied'
String dialogPartyASelection_1 = 'Accepted'
}
def obj = new Test()
def propMap = obj.properties as Map
assert propMap['dialogPartyASelection_5'] == 'Accepted'
答
感谢你的帮助,以@ Steinar的建议,我已经能够做到这一点象下面这样:
def selectionsPartyA = [], selectionsPartyB = [], selections = [], PostChildrenSelections = [],
PostSelections = ['7','6','5','4','3','2','1']
// selections
for (post in PostSelections) {
selectionsPartyA += "dialogPartyASelection_"+post
selectionsPartyB += "dialogPartyBSelection_"+post
}
selections.addAll(selectionsPartyB)
selections.addAll(selectionsPartyA)
dialogPartyASelection_7 = 'Denied'
dialogPartyBSelection_7 = 'Accepted'
dialogPartyASelection_6 = 'Denied'
dialogPartyBSelection_6 = 'Accepted'
dialogPartyBSelection_5 = 'Denied'
dialogPartyASelection_5 = 'Accepted'
dialogPartyBSelection_4 = 'Denied'
dialogPartyASelection_4 = 'Accepted'
dialogPartyBSelection_3 = 'Denied'
dialogPartyASelection_3 = 'Accepted'
dialogPartyBSelection_2 = 'Denied'
dialogPartyASelection_2 = 'Accepted'
dialogPartyBSelection_1 = 'Denied'
dialogPartyASelection_1 = 'Accepted'
test = [:]
for (entry in selections){
test.put(entry, getProperty(entry))
}
assert test == [dialogPartyBSelection_7:Accepted, dialogPartyBSelection_6:Accepted, dialogPartyBSelection_5:Denied, dialogPartyBSelection_4:Denied, dialogPartyBSelection_3:Denied, dialogPartyBSelection_2:Denied, dialogPartyBSelection_1:Denied, dialogPartyASelection_7:Denied, dialogPartyASelection_6:Denied, dialogPartyASelection_5:Accepted, dialogPartyASelection_4:Accepted, dialogPartyASelection_3:Accepted, dialogPartyASelection_2:Accepted, dialogPartyASelection_1:Accepted]
+1
您的第一个for循环可以用'collectMany'替代,第二个用'collectEntries'替换。也不要使用大写变量,因为groovy语法分析器迟早会将它们与类相混淆。 – cfrick
看起来你只是建立属性名称的名单,可以获取价值,而不是:'getProperty(name)' – Steinar
你想创建一个Map(**我试图得到:**)从一个实例?(实例有dialogParty [A或B] Selection_X?) – koji
我是试图创建一个包含实例字段名称和值的映射。 @Steinar谢谢!这有助于 - 如果你有一个'模式'有效地做到这一点,这将真正帮助我学习:) – lolno