从 Groovy 或 Java 中的复杂数据结构中删除空值
Remove null values from complex data structure in Groovy or Java
我需要从复杂的 LinkedHashMap 中删除空键值:
这是一个简单的例子:
- 输入
[f1:abc, f2:xyz, f3:lmn, test:null, people:[[name:James, City:Atlanta], [name:Rachel, City:null]], person:[name:James, Phone:4045555555, test:null]]
- 期望的输出:
[f1:abc, f2:xyz, f3:lmn, people:[[name:James, City:Atlanta], [name:Rachel]], person:[name:James, Phone:4045555555]]
我已经完成一半了,我只是坚持从列表(人)中删除空值。这是我目前所拥有的:
def removeNullValues(Object map) {
map.collectEntries { k, v -> [k, v instanceof Map? removeNullValues(v) : v]}
.findAll { k, v -> v != null}
}
您可以使用多态性 select 不同的方法,具体取决于项目是列表、映射还是其他:
def input = [
f1:'abc',
f2:'xyz',
f3:'lmn',
test:null,
woo:[1, 2, null, 3],
people:[
[name:'James', City:'Atlanta'],
[name:'Rachel', City:null]
],
person:[name:'James', Phone:'4045555555', test:null]
]
def removeNulls(other) {
other
}
def removeNulls(List list) {
list.findResults { removeNulls(it) }
}
def removeNulls(Map map) {
map.findAll { k, v -> v != null }.collectEntries { k, v ->
[k, removeNulls(v)]
}
}
println removeNulls(input)
将打印:
[f1:abc, f2:xyz, f3:lmn, woo:[1, 2, 3], people:[[name:James, City:Atlanta], [name:Rachel]], person:[name:James, Phone:4045555555]]
我需要从复杂的 LinkedHashMap 中删除空键值:
这是一个简单的例子:- 输入
[f1:abc, f2:xyz, f3:lmn, test:null, people:[[name:James, City:Atlanta], [name:Rachel, City:null]], person:[name:James, Phone:4045555555, test:null]]
- 期望的输出:
[f1:abc, f2:xyz, f3:lmn, people:[[name:James, City:Atlanta], [name:Rachel]], person:[name:James, Phone:4045555555]]
我已经完成一半了,我只是坚持从列表(人)中删除空值。这是我目前所拥有的:
def removeNullValues(Object map) {
map.collectEntries { k, v -> [k, v instanceof Map? removeNullValues(v) : v]}
.findAll { k, v -> v != null}
}
您可以使用多态性 select 不同的方法,具体取决于项目是列表、映射还是其他:
def input = [
f1:'abc',
f2:'xyz',
f3:'lmn',
test:null,
woo:[1, 2, null, 3],
people:[
[name:'James', City:'Atlanta'],
[name:'Rachel', City:null]
],
person:[name:'James', Phone:'4045555555', test:null]
]
def removeNulls(other) {
other
}
def removeNulls(List list) {
list.findResults { removeNulls(it) }
}
def removeNulls(Map map) {
map.findAll { k, v -> v != null }.collectEntries { k, v ->
[k, removeNulls(v)]
}
}
println removeNulls(input)
将打印:
[f1:abc, f2:xyz, f3:lmn, woo:[1, 2, 3], people:[[name:James, City:Atlanta], [name:Rachel]], person:[name:James, Phone:4045555555]]