recursion - 从 Groovy 或 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}
}
解决方案
您可以使用多态性来选择不同的方法,具体取决于项目是列表、映射还是其他:
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]]
推荐阅读
- c# - CS0103: 当前上下文中不存在名称“ ”
- angular - 离子标签图标动态颜色
- amazon-s3 - 为什么当我将图像上传到 S3 存储桶时,我的 API 不起作用?
- python - 使用用户指定的路径名
- json - 从 postgresql 中 json 文件的结果中选择字符串
- kubernetes - Gcloud kubernetes集群接入互联网
- git - 如何使用 svn2git 将 svn 存储库迁移到 git?
- solr - Solr 是否支持过滤器聚合?
- c# - 列表
当我运行代码时不要做任何事情,但如果我逐步完成它就可以了 - python - 使用 numpy.argpartition 忽略 NaN