如何为嵌套对象分配属性?

时间:2019-08-07 16:25:50

标签: groovy

我有一个过滤器循环,用于将列表项与嵌套对象项进行比较:

processArticlesNumbers

processArticlesNumbers = ["1", "2", "3"]

articlesMap

[Business_Unit1: 
    [Supplier1: 
        ["2", "5", "8"],
    Supplier2: 
        ["2", "5", "8"]
    ],
 Business_Unit2: 
    [Supplier3: 
        ["2", "5", "8"],
    Supplier4: 
        ["2", "5", "8"]
    ],
]

我想过滤出值并将不匹配的值分配给具有相同结构(expiredAndNewArticlesMap)的新对象。

当前,我收到以下错误:

  

expiredAndNewArticlesMap。$({-> ...})。$({--...})“是方法调用   表达式,但它应该是变量表达式

def articlesMap = checkNewAndExpiredArticles()
def expiredAndNewArticlesMap = [:]


articlesMap.each { businessUnit, articlesInfo ->
    articlesInfo.each { supplier, supplierArticles ->
        supplierArticles.each { articleNumber ->
            println articleNumber
            if (!processArticlesNumbers.contains(articleNumber)) {
                if (expiredAndNewArticlesMap.${businessUnit}){
                    if (expiredAndNewArticlesMap.${businessUnit}.${supplier}) {
                        expiredAndNewArticlesMap.${businessUnit}.${supplier}.add(articleNumber)
                    } else {
                            def list = []
// ERROR appears here 

                       expiredAndNewArticlesMap.${businessUnit}.${supplier} = list
                        expiredAndNewArticlesMap.${businessUnit}.${supplier}.add(articleNumber)
                    }
                } else {
                    expiredAndNewArticlesMap.${businessUnit} = [supplier: []]
                    expiredAndNewArticlesMap.${businessUnit}.${supplier}.add(articleNumber)
                }

            }
        }
    }
}

如何为嵌套对象分配值?

1 个答案:

答案 0 :(得分:2)

要从字符串名称访问任意属性,您需要使用类似以下的GString:

expiredAndNewArticlesMap."${businessUnit}"

expiredAndNewArticlesMap."${businessUnit}"."${supplier}"

您还可以通过按键以更清晰的方式访问地图:

expiredAndNewArticlesMap[businessUnit]

当您要从包含字符串的变量中分配特定键时,需要将其用括号括起来:

expiredAndNewArticlesMap."${businessUnit}" = [(supplier): []]