Object 如果贴图列表有额外的键,如何将贴图列表转换为对象列表

Object 如果贴图列表有额外的键,如何将贴图列表转换为对象列表,object,arraylist,groovy,hashmap,Object,Arraylist,Groovy,Hashmap,我的问题几乎类似于 但是现在的问题是,我有映射的列表,其中映射包含一些额外的键,这些键在我的Pojo类中不作为属性出现,如下所示:- List list = [ [param1: "a", param2: ["a","b","c"], param3:[a:"a",b:"b",c:"c"], param4:true, param5:1, param6: "pamra6",param7: "pamra7"], [param1: "b", param2: ["d","e","f"],

我的问题几乎类似于

但是现在的问题是,我有
映射的
列表
,其中
映射
包含一些额外的键,这些键在我的
Pojo
类中不作为属性出现,如下所示:-

List list = [
    [param1: "a", param2: ["a","b","c"], param3:[a:"a",b:"b",c:"c"], param4:true, param5:1, param6: "pamra6",param7: "pamra7"],
    [param1: "b", param2: ["d","e","f"], param3:[d:"d",e:"e",f:"f"], param4:false, param5:2, param6: "pamra6",param7: "pamra7"]
]
list.collect { new Pojo(it) }
class Pojo {
 def param1
 def param2
 def param3
 def param4
 def param5

def static build(def map) {
    new Pojo(map.findAll { k, v -> k in Pojo.metaClass.properties*.name})
  }
}

def newList = list.collect { Pojo.build(it) }
在这个
列表中
两个额外的键
param6
param7
包含在
Pojo
类中不存在的地方,因为在我的场景中,我只考虑那些出现在
Pojo
中的属性,我不能增加
Pojo
类中的额外属性

因此,当我要将此
地图列表
转换为
对象列表
时,如下所示:-

List list = [
    [param1: "a", param2: ["a","b","c"], param3:[a:"a",b:"b",c:"c"], param4:true, param5:1, param6: "pamra6",param7: "pamra7"],
    [param1: "b", param2: ["d","e","f"], param3:[d:"d",e:"e",f:"f"], param4:false, param5:2, param6: "pamra6",param7: "pamra7"]
]
list.collect { new Pojo(it) }
class Pojo {
 def param1
 def param2
 def param3
 def param4
 def param5

def static build(def map) {
    new Pojo(map.findAll { k, v -> k in Pojo.metaClass.properties*.name})
  }
}

def newList = list.collect { Pojo.build(it) }
它抛出一个错误,如下所示:-

groovy.lang.MissingPropertyException:没有这样的属性:的param6 班级:Pojo

这是绝对正确的,但当我像下面这样转换时:-

list.collect { it as  Pojo } 

它不会抛出任何错误,但当我们得到如下值时:-

.each { pojo ->

  pojo.param1
  ------------
  ------------
}
找不到这些值中的任何一个。找到的所有值均为
null

当我使用
.dump()
检查已转换的
对象列表时,它被转换为
Pojo1\u groovyProxy
类似于代理对象

所以我的问题是,在这种情况下如何转换??

这里有一种方法可以做到这一点(如果以后将
param6
添加到类中,它会尝试具有弹性):

(编辑:更干净,多亏了)

在提出建议后,通过以下方式实现:-

List list = [
    [param1: "a", param2: ["a","b","c"], param3:[a:"a",b:"b",c:"c"], param4:true, param5:1, param6: "pamra6",param7: "pamra7"],
    [param1: "b", param2: ["d","e","f"], param3:[d:"d",e:"e",f:"f"], param4:false, param5:2, param6: "pamra6",param7: "pamra7"]
]
list.collect { new Pojo(it) }
class Pojo {
 def param1
 def param2
 def param3
 def param4
 def param5

def static build(def map) {
    new Pojo(map.findAll { k, v -> k in Pojo.metaClass.properties*.name})
  }
}

def newList = list.collect { Pojo.build(it) }

谢谢你给我一个大提示:)

是否需要在
Pojo
类中使用
static build()
???没有预构建方法吗???除了matcher/declaredFields这件事,你就不能这样做:
def fields=Pojo.declaredFields.findAll{!it.synthetic}*.name
@tim_yates在你建议我使用像
def static build(def map){new Pojo(map.findAll)之前,你的观点给了我更多的澄清{k,v->k in Pojo.metaClass.properties*.name}
…这也正确吗?????