2017-04-17 61 views
2

兩個元素的列表我有兩個項目列表的列表:計數重複內的ArrayList(Groovy中)

def list = [[key1, value1], [key1, value1], [key2, value1], [key2, value2], ...] 

我想寫Groovy代碼將採取「名單」,並返回另一個列表,這不僅顯示每個重複,兩個項目清單的頻率,而且如果有它獨特的項目:

def newList = [[key1, value1:2], [key2, [value1:1, value2:1]], ...]; 

這種格式背後的原因是因爲我會寫更多的代碼拋出,如果出現錯誤一個特定的「鑰匙」有不止一個「價值」。如果有更簡單的方法來做到這一點,任何幫助/建議,將不勝感激。

回答

1

如果你表現出在這裏問一個問題,當你嘗試過什麼解決它通常可以幫助...

在這種情況下,雖然,你只需要:

def result = list.groupBy { it[0] } 
       .collect { k, v -> [k, v.countBy { it[1] }] } 

而且結果將等於:

[['key1', ['value1':2]], ['key2', ['value1':1, 'value2':1]]] 

你也可以做這樣的事情:

def result = list.groupBy { it[0] } 
       .collectEntries { k, v -> [k, v*.getAt(1).unique().size() ] } 

爲了給你:

['key1':1, 'key2':2] 
+0

我通常不張貼問題,所以以後,我會寄我已經試過,好建議。我知道.groupBy()會在那裏,謝謝你的答案。 – TheRumpler

+0

@TheRumpler,如果有幫助,你需要考慮[接受答案](http://stackoverflow.com/help/someone-answers)。 – Rao