【问题标题】:Remove null values from complex data structure in Groovy or Java从 Groovy 或 Java 中的复杂数据结构中删除空值
【发布时间】:2019-09-17 11:24:02
【问题描述】:

我需要从复杂的 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}
}

【问题讨论】:

    标签: recursion groovy data-cleaning linkedhashmap


    【解决方案1】:

    您可以使用多态性根据项目是列表、地图还是其他方式来选择不同的方法:

    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]]
    

    【讨论】:

    • 谢谢,太棒了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2013-04-25
    • 1970-01-01
    • 2021-06-30
    • 2022-01-01
    • 2021-09-19
    • 2017-09-03
    相关资源
    最近更新 更多