Таким образом, учитывая входной список карт:
def input = [
[name:'john', title:'senior', access:'floor1'],
[name:'john', title:'senior', access:'floor2'],
[name:'carol', title:'senior', access:'floor2']
]
Мы можем сгруппировать по первым двум (опять же, как карта):
input.groupBy { [name: it.name, title: it.title] }
Что дает нам:
[
[name:john, title:senior]:[
[name:john, title:senior, access:floor1],
[name:john, title:senior, access:floor2]
],
[name:carol, title:senior]:[
[name:carol, title:senior, access:floor2]
]
]
И затем мы можем собрать их в требуемой форме вывода, давая нам:
input.groupBy { [name: it.name, title: it.title] }.collect { k, v ->
k + [access: v.access]
}
Что дает результат:
[
[name:john, title:senior, access:[floor1, floor2]],
[name:carol, title:senior, access:[floor2]]
]