首页 > 解决方案 > 将地图列表标准化为子列表地图

问题描述

这如何在 groovy 中逆转?

IE。

我想转这个:

[ [a:"c", b:"e"], [a:"d",b:"f"] ] -- 列表中可以有更多元素

进入:[a:[“c”,“d”],b:[“e”,“f”]]

标签: listgroovymaps

解决方案


所以我们可以:

将映射列表融合成一个长列表,其中每个元素都有一个共同的 k/v 结构

然后按key分组

然后我们需要遍历这个新地图,并清理值

这让我们:

def result = [ [a:"c", b:"e"], [a:"d",b:"f"] ]
    *.collect { [k: it.key, v: it.value] } 
    .flatten()
    .groupBy { it.k }
    .collectEntries { a, b ->
        [a, b.v]
    }

assert result ==​ [a:['c', 'd'], b:['e', 'f']]​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

推荐阅读