Recursion 在Groovy或Java中从复杂数据结构中删除空值 我需要从复杂LinkedHashMap中删除空键值: 下面是一个简单的例子: 输入 期望输出:

Recursion 在Groovy或Java中从复杂数据结构中删除空值 我需要从复杂LinkedHashMap中删除空键值: 下面是一个简单的例子: 输入 期望输出:,recursion,groovy,data-cleaning,linkedhashmap,Recursion,Groovy,Data Cleaning,Linkedhashmap,我已经做了一半了,我只是停留在从列表中删除空值(人)。以下是我目前掌握的情况: def removeNullValues(Object map) { map.collectEntries { k, v -> [k, v instanceof Map? removeNullValues(v) : v]} .findAll { k, v -> v != null} } 根据项目是列表、映射还是其他,可以使用多态性选择不同的方法: def input =

我已经做了一半了,我只是停留在从列表中删除空值(人)。以下是我目前掌握的情况:

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

谢谢,这太棒了!
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]]