java - 如何从重复的映射值生成唯一键

标签 java groovy

我有一个包含 map 列表的 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)
}}

最佳答案

这里一个好的开始是groupBy,然后塑造你想要的数据。更短的是带有默认值的映射的reduce。例如

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
}

关于java - 如何从重复的映射值生成唯一键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55202202/

相关文章:

java - CPU缓存在C编程中无效?

java - CDI bean 中注入(inject)的 Conversation 接口(interface)是否需要 getter?

java - 从绘图对象中清除窗口

elasticsearch - 如何将脚本化度量标准中的Elasticsearch字段的类型从Long更改为Double?

java - Groovy 脚本防止删除文件 - 如何遵守它?

java - 用Java实现方形分区

java - 如何使用java模板实现这个方法?

java - 如何将 groovy 属性复制到 java bean 属性

grails - 从 Config.groovy 在 resources.xml 中配置 Spring Integration XML

grails - GORM:继承字段的更改不是isDirty()吗?