我有一個看起來像這兩數組列表,(這我要簡化這個問題):的Groovy - ArrayList的一個遞增項目數量,而不是重新添加
def originalList = [[name: "Ben", age: 21, weight: 80], [name: "Martin", age: 36, weight: 99], [name: "Sammy", age: 18, weight: 65], [name: "Ben", age: 28, weight: 75], [name: "Ben", age: 28, weight: 120]]
另一位我會請撥打newList
並開始爲空,即def newList = []
,但會添加屬性name
,age
和occurrences
。
現在我想做的是循環遍歷originalList
,並添加其項目newList
但如果newList
已經包含具有相同名稱和年齡屬性的項目我想遞增occurrences
屬性的項目,如:
def newList = [[name: "Ben", age: 21, occurrences: 1], [name: "Martin", age: 36, occurrences: 1], [name: "Sammy", age: 18, occurrences: 1], [name: "Ben", age: 28, occurrences: 2]]
我該如何着手完成這項工作?這是我嘗試過的。
originalList.each {
newList.eachWithIndex { nl, i ->
if(nl.name.equals(it.name) && nl.age == it.age) {
nl.occurrances++
} else {
newList.add([name: it.name, age: it.age, occurrances: 0])
}
}
}
它看起來像它不工作怎麼把newList.eachWithIndex
永遠循環怎麼把它開始是空的,怎麼把它永遠循環可以永遠遞增occurrences
財產或項目添加到列表中。
或者只需通過將您感興趣的k/v集合分組即可擺脫第一層即可:'originalList.groupBy {it.subMap(「name」,「age」)}。collect {k,os-> k + [occurrences: os.size()]}' – cfrick
@cfrick,很好!你是否每天都與groovy合作? – Opal
或'originalList.groupBy {「$ it.name :: $ it.age」} .values()。collect {it.head()+ [occurrences:it.size()]}' –