2

我试图找出两张地图中的值之间的差异

@Test
void testCollecEntries() {
    def mapOne= ["A":900,"B":2000,"C":1500]
    def maptwo = ["A":1000,"D":1500,"B":1500]

    def balanceMap = maptwo.collectEntries { key, value-> [key:value-mapOne[key]]   }

    println balanceMap
}

我试图找出 maptwo 的值与 mapOne 的值的差异。如果该条目不存在,我需要忽略。这给了我一个空指针异常。

感谢任何帮助。

4

2 回答 2

3

它会抛出 NPE,因为您正在寻找不可用的 mapOne 中的键“D”。您可以通过 null 安全操作和默认值为 0 来避免这种情况。

def one= [A:900, B:2000, C:1500]
def two = [A:1000, D:1500, B:1500]

def result = two.collectEntries{k,v -> [k, (v - (one[k]?:0))]}
println result

//Print
[A:100, D:1500, B:-500]

如果您想考虑公共密钥,请使用:

def result = two.collectEntries{k,v -> one[k] ? [k, (v - one[k])] : [:]}

//or
//def result = two.collectEntries{k,v -> (k in one.keySet()) ? [k, (v - one[k])] : [:]}

//Print
[A:100, B:-500]
于 2013-08-03T00:35:04.417 回答
0

你可以看看这个很好的例子: http: //groovyconsole.appspot.com/script/364002

于 2015-01-30T20:34:12.733 回答