如何在Groovy中使用CollectMap创建每个键都有多个值的Map

zlhcx6iw  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(155)

我有下面的列表列表。它的格式是[String,Double]

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] ]

字符串
我想有一个Map,我组每个部门(字符串)作为一个关键与多个相关的温度(双)
我已经能够通过使用.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的新手,一直在尝试弄清楚是否有可能只使用collectentries来获得相同的输出。我知道groovy不需要显式的变量声明,但请在您的解释中包含它们,这样我就可以完全理解代码中发生的事情。

zd287kbt

zd287kbt1#

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)] }

字符串

相关问题