2017-04-17 2 views
2

Ich habe eine Liste von zwei Itemlisten:Count doppelte Zweielementlisten innerhalb Arraylist (Groovy)

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

I Groovy Code zu schreiben versuchen, die „Liste“ statt und eine weitere Liste zurückkehren, das zeigt nicht nur die Frequenz jedes Duplikat, zwei~~POS=TRUNC-Liste, sondern auch, wenn es Elemente, die einzigartig sind:

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

die Argumentation hinter diesem Format ist, weil ich mehr Code schreiben würde einen Fehler zu werfen, wenn Ein bestimmter "Schlüssel" hatte mehr als einen "Wert". Wenn es eine einfachere Möglichkeit gibt, dies zu tun, würde jede Hilfe/Vorschläge geschätzt werden.

Antwort

1

Es hilft normalerweise, wenn Sie zeigen, was Sie versucht haben, wenn hier eine Frage zu stellen ...

In diesem Fall aber müssen Sie nur:

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

und das Ergebnis wird gleich:

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

Man könnte auch so etwas tun:

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

Um Ihnen:

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

ich normalerweise keine Fragen stellen, so geht nach vorn Ich werde schreiben, was ich habe versucht, ein guter Rat. Ich wusste .groupBy() würde irgendwo da drin sein, danke für die Antwort. – TheRumpler

+0

@TheRumpler, wenn das hilft, müssen Sie [akzeptieren Antwort] (http://stackoverflow.com/help/someone-answers) berücksichtigen. – Rao

Verwandte Themen