Как сгруппировать поток с карты на карту>? - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть поток карты [имя: имя1, тип: тип1, деск: деск1, порядковый номер: 1].Как преобразовать / сгруппировать (с помощью Groovy) в Map>: Map (type1: Map (neme: name1, desc: desc1, ordinal: 1)).Поток карты

[name:productName,  type:IN, ordinal:1, description:desc]
[name:productName1,  type:IN, ordinal:2, description:desc]
[name:productName2,  type:OUT, ordinal:3, description:desc] 

и я получаю: Карта:

IN: Map[
    [name:productName,  type:IN, ordinal:1, description:desc.], 
    [name:productName1,  type:IN, ordinal:2, description:desc.]]
OUT: Map[
    [name:productName2, type:OUT, ordinal:3, description:desc.]]

1 Ответ

0 голосов
/ 18 февраля 2019

Вы можете использовать метод 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 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...