gpt4 book ai didi

dictionary - 从 groovy 中的键创建嵌套映射

转载 作者:行者123 更新时间:2023-12-03 03:42:40 26 4
gpt4 key购买 nike

我对 groovy 比较陌生,并且在 gradle 构建的上下文中使用它。因此,如果有一个简单的开箱即用解决方案,请不要苛刻。

基本上我正在尝试完成 Return Nested Key in Groovy 的相反操作.也就是说,我从 System.properties 中读取了一些键。例如 map user.home和相应的值,如 C:\User\dpr .现在我想创建一个反射(reflect)此结构的 map ,以便在 groovy.text.SimpleTemplateEngine 中使用它。作为绑定(bind):

[user : [home : 'C:\Users\dpr']]

键可以定义任意深度层次结构。例如 java.vm.specification.vendor=Oracle Corporation应该变成:
[java : [vm : [spec : [vendor : 'Oracle Corporation']]]]

此外,还有具有相同父级的属性,例如 user.name=dpruser.country=US :
[
user: [
name: 'dpr',
country: 'US'
]
]

编辑 : 而 ConfigSlurper非常好,创建嵌套映射有点过于防御性,因为它在某个键的最小深度处停止嵌套。

我目前最终使用了这个
def bindings = [:]
System.properties.sort().each {
def map = bindings
def split = it.key.split("\\.")
for (int i = 0; i < split.length; i++) {
def part = split[i];

// There is already a property value with the same parent
if (!(map instanceof Map)) {
println "Skipping property ${it.key}"
break;
}

if (!map.containsKey(part)) {
map[part] = [:]
}

if (i == split.length - 1) {
map[part] = it.value
} else {
map = map[part]
}
}
map = it.value
}

使用此解决方案,属性 file.encoding.pkg , java.vendor.urljava.vendor.url.bug被丢弃,这不是很好,但我可以应付。

然而,上面的代码不是很时髦。

最佳答案

您可以使用 ConfigSlurper :

def conf = new ConfigSlurper().parse(System.properties)
println conf.java.specification.version

关于dictionary - 从 groovy 中的键创建嵌套映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38396695/

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