2016-11-15 65 views
2

有兩個不同的地圖。一個比另一個大。小地圖的鍵總是大地圖的鍵的子集。我想獲取這兩個地圖通用的鍵值,並使用Groovy功能創建列表列表。目標是通過儘可能少的代碼來實現Groovy功能。使用公鑰的值創建兩個列表中的列表的列表

Map big = ['FirstName':'first_name', 'LastName':'last_name', 'FullName':'full_name'] 
Map small = ['FirstName':'John', 'FullName':'John Williams'] 

的println輸出

[[first_name, John], [full_name, John Williams]] 

回答

3
//works even if the small map is not a subset completely 
def result = [] 
big.keySet().intersect(small.keySet()).each { 
    result << [big[it], small[it]] 
} 
assert [['first_name', 'John'], ['full_name', 'John Williams']] == result 

編輯:加入的兩種變化,以所建議的解決方案通過@taiyebur

// VARIATION 2 
def result2 = big.subMap(small.keySet()).collect([]) { 
    [it.value, small.get(it.key)] 
} 
assert [['first_name', 'John'], ['full_name', 'John Williams']] == result2 

// VARIATION 3 
def result3 = small.collect([]) { 
    [big[it.key], it.value] 
} 
assert [['first_name', 'John'], ['full_name', 'John Williams']] == result3 
+0

謝謝你的解決方案。它給了我更多的想法。 – taiyebur

+0

使用'collect'可以完成這項工作:'big.keySet()。intersect(small.keySet())。collect {[big [it],small [it]}' – Opal