Как создать уникальный ключ из дублированных значений карты - PullRequest
0 голосов
/ 17 марта 2019

У меня есть JSON, который содержит список карт:

{
"aprLimits": [{
    "orgId": "Company 1",
    "rangeStart": "54936",
    "rangeEnd": "54936",
    "amountLimit": 100000
}, {
    "orgId": "Company 1",
    "rangeStart": "59434",
    "rangeEnd": "59434",
    "amountLimit": 0.01
}, {
    "orgId": "Company 1",
    "rangeStart": "54345",
    "rangeEnd": "54345",
    "amountLimit": 0
}, {
    "orgId": "Company 1",
    "rangeStart": "54345",
    "rangeEnd": "54345",
    "amountLimit": 250000
}, {
    "orgId": "Company 2",
    "rangeStart": "043",
    "rangeEnd": "043",
    "amountLimit": 0.01
}, {
    "orgId": "Company 2",
    "rangeStart": "042",
    "rangeEnd": "042",
    "amountLimit": 1000
}, {
    "orgId": "Company 2",
    "rangeStart": "032",
    "rangeEnd": "032",
    "amountLimit": 0
}]}

Моя цель - собрать данные, соответствующие уникальному orgId, преобразовав его в ключ и присвоив ему остальные значения так,конечный результат выглядит следующим образом:

["Company 1": [[54936, 54936, 100000], [59434, 59434, 0.01], [54345, 54345, 0], [54345, 54345, 250000]], "Company 2": [[043, 043, 0.01], [042, 042, 1000], [032, 032, 0]]]

Я дошел до получения уникальных идентификаторов orgId и сбора данных в списки, но у меня не получается понять, как связать уникальный ключ со списками

def slurper = new JsonSlurper()
def parsedJson = slurper.parseText(json)
def list = []
def orgIds = parsedJson.aprLimits.orgId.unique()

parsedJson.aprLimits.each {
if (orgIds.contains(it.orgId)) {
    data = new ArrayList(Arrays.asList(it.rangeStart, it.rangeEnd, it.amountLimit))
    list.add(data)
}}

1 Ответ

2 голосов
/ 17 марта 2019

Хорошим началом здесь будет groupBy, а затем сформируйте данные, которые вам нужны.Короче уменьшить с картой со значениями по умолчанию.Например,

parsedJson.aprLimits.inject(
    [:].withDefault{[]} // if a key is missing, add it and make the value an empty vector
){ r, v -> 
    r[v.orgId] << [v.rangeStart, v.rangeEnd, v.amountLimit]
    r
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...