我通过第三方api获得了一个对象。我使用包装器函数来获取它,然后从其属性中返回一个映射:
wrapperFunc() {
def myObj = someapi.getblah().getSomeObect()
return [
aaa: myObj.aaa,
bbb: myObj.bbb,
ccc: myObj.ccc
]
}
现在我可以像这样手动浏览对象中的每个属性,但是是否有一个优雅的groovy功能可以从对象的属性中动态构建一个地图?
答案 0 :(得分:1)
你可以这样做:
Norway
Australia
Switzerland
...
San Marino
Somalia
Tuvalu
答案 1 :(得分:0)
这基本上是@ jeff-scott-brown答案的变体。
首先,创建一个包含Object-to-Map逻辑的类,该逻辑使用Groovy MetaClass
来访问类型的属性。 findAll
过滤掉了“class”属性,我假设你不关心它。 collectEntries
行将每个MetaProperty
对象转换为Map条目。
class ElegantGroovyFeature {
static Map asType(Object o, Class m) {
if (m == Map) {
o.metaClass.properties
.findAll { it.getSetter() != null }
.collectEntries { prop -> [prop.name, prop.getProperty(o)] }
} else {
o.asType(m)
}
}
}
扩展程序会覆盖与asType
运算符对应的as
方法,您可以使用obj as Map
表达式将任意对象转换为地图:
def obj = someapi.getBlah().getSomeObject()
use (ElegantGroovyFeature) {
def mapOfProperties = obj as Map
}
答案 2 :(得分:-1)
const obj = {foo:'bar',baz:42};
const map = new Map(Object.entries(obj));
的console.log(地图); // Map {foo:“bar”,ba enter code here
z:42}