我的gradle文件中有这段代码:
def itemA = getVar('ITEM_A')
if (itemA) {
envmap['itemA'] = itemA
}
def itemB = getVar('ITEM_B')
if (itemB) {
envmap['itemB'] = itemB
}
只有在新值不为空或为空时,是否有一种简洁的方式来分配变量?
答案 0 :(得分:1)
您可以像这样写一个帮助器闭包:
def envHelper = { map, vkey, mkey ->
getVar(vkey)?.with { v ->
envmap[mkey] = v
}
}
然后,您可以替换
def itemA = getVar('ITEM_A')
if (itemA) {
envmap['itemA'] = itemA
}
与
envHelper(envmap, 'ITEM_A', 'itemA')
答案 1 :(得分:0)
使用collectEntries和findAll获取Map。
//An example of keys corresponding to your query
def keyNameFromVarName(String varName){
varName.toLowerCase().replace('_','').substring(0,varName.length()-2)+
varName.substring(varName.length()-1,varName.length())
}
def varNames = ['ITEM_C', 'ITEM_D', 'ITEM_E', 'ITEM_F', 'ITEM_G', 'ITEM_H']
Map map = varNames.collectEntries{ [ (keyNameFromVarName(it)) : getVar(it) ] }.findAll{ k,v-> v }
首先在列表对象上使用collectEntries。请记住将地图密钥的生成放在括号内,否则会出现编译错误。
varNames.collectEntries{ [ (keyNameFromVarName(it)) : getVar(it) ] }
然后使用findAll获取值不为null的条目。将k,v定义为闭包的参数,以便于访问该值。
.findAll{ k,v-> v }