如何在 Groovy 中使用 CollectEntries 创建一个每个键都有多个值的映射

问题描述 投票:0回答:1

我有以下列表。格式为[String, Double]

定义数据 = [ [A, 15.2], [A, 14.7], [B, 6.54], [A, 4.5], [A, 16.8], [A, 7.7], [C, 1.5], [B, 13.1],[B,6],[C,10.1]]

我想要一张地图,将每个扇区(字符串)分组为具有多个关联温度(双)的键

我已经能够通过使用 .each 迭代数据来获得我想要的输出

Map<String, List<BigDecimal>> groupedData = new HashMap<>()
data.each {it ->
    String sector = it[0]
    BigDecimal temp = it[1]

    if(!groupedData.containsKey(sector))
    {
        groupedData.put(sector, [])
    }
    groupedData.get(sector).add(temp)

}

我是 groovy 的新手,一直试图弄清楚是否可以仅使用集合条目获得相同的输出。我知道 groovy 不需要显式变量声明,但请将它们包含在您的解释中,以便我可以完全理解代码中发生的情况

java groovy collections hashmap
1个回答
0
投票

2 个选项。两者给出相同的结果

def data = [ ['A', 15.2], ['A', 14.7], ['B', 6.54], ['A', 4.5], ['A', 16.8], 
             ['A', 7.7], ['C', 1.5], ['B', 13.1], ['B', 6], ['C', 10.1] ]

println data.groupBy{it[0]}.collectEntries{k,v-> [ k,v.collect{it[1]} ]}
println data.groupBy{it[0]}.collectEntries{k,v-> [ k,v*.get(1)] }
© www.soinside.com 2019 - 2024. All rights reserved.