2017-02-12 16 views
0

我有一個地圖,其包含數組作爲這樣:fruits = [[apples, bananas, pears]:lunch, [apples, grapes]:dinner, [pears, mango, oranges]:breakfast, [mango]:snack]如何在groovy中訪問地圖內的數組?

,我需要找到相同的重複水果並將它們與相關的膳食一起輸出,例如輸出將是apples:lunchapples:dinner

我有試圖flatten.()的數組,但都沒有成功:

fruits.flatten().countBy{it}.findAll {it.value > 1}.keySet()

回答

5

好吧,鑑於以下地圖:

def fruits = [['apples', 'bananas', 'pears']:'lunch', 
       ['apples', 'grapes']:'dinner', 
       ['pears', 'mango', 'oranges']:'breakfast', 
       ['mango']:'snack'] 

你可以得到所有鍵的列表:

fruits.keySet().flatten() 

然後通過這個循環,並收集地圖上的每一個他們在(收集他們入列表)中發現的飯菜:

.collectEntries { f -> [f, fruits.findAll { it.key.contains(f) }.values().collect()] } 

和(如果你想),只保留出現在兩餐的那些:

.findAll { it.value.size() > 1 } 

所以把他們放在一起,

def repeatedIngredients = fruits.keySet() 
     .flatten() 
     .collectEntries { f -> [f, fruits.findAll { it.key.contains(f) }.values().collect()] } 
     .findAll { it.value.size() > 1 } 

爲了給你:

assert repeatedIngredients == [ 
    'apples':['lunch', 'dinner'], 
    'pears':['lunch', 'breakfast'], 
    'mango':['breakfast', 'snack'] 
]