Вы можете использовать метод Stream.collect()
с Collectors.groupingBy { it.type }
, чтобы собрать все элементы в виде карты ключа type
и значения списка элементов.Рассмотрим следующий пример:
import java.util.stream.Collectors
import java.util.stream.Stream
def input = Stream.of(
[name: 'productName', type: 'IN', ordinal: 1, description: 'desc'],
[name: 'productName1', type: 'IN', ordinal: 2, description: 'desc'],
[name: 'productName2', type: 'OUT', ordinal: 3, description: 'desc'],
)
def result = input.collect(Collectors.groupingBy { it.type })
result.each { println it }
Вывод:
IN=[{name=productName, type=IN, ordinal=1, description=desc}, {name=productName1, type=IN, ordinal=2, description=desc}]
OUT=[{name=productName2, type=OUT, ordinal=3, description=desc}]
В качестве альтернативы, если вы вводите не Stream
, а List
, вы можете использовать старый добрый Groovy Collection.groupBy()
тот же эффект:
def input2 = [[name: 'productName', type: 'IN', ordinal: 1, description: 'desc'],
[name: 'productName1', type: 'IN', ordinal: 2, description: 'desc'],
[name: 'productName2', type: 'OUT', ordinal: 3, description: 'desc']]
def result2 = input2.groupBy { it.type }
result2.each { println it }