如何按2个不同的标准对地图值进行分组以获得下面的输出?
def listofMaps = [ [name:'Clark',city:'London',hobby: 'chess'],[name:'Sharma',hobby: 'design'],[name:'Maradona',city:'LA',hobby: 'poker'],[name:'Zhang',city:'HK',[name:'Ali',city: 'HK',[name:'Liu',[name:'Doe',[name:'Smith',[name:'Johnson',city: 'London',[name:'Waters',[name:'Hammond',[name:'Rogers',]
>团体订单:爱好,城市
poker London Smith Johnson LA Maradona Waters HK Ali Liu design London Sharma LA Doe Hammond HK chess London Clark LA Rogers HK Zhang
>团体订单:城市,爱好
London poker Smith Johnson design Sharma chess Clark LA poker Maradona Waters design Doe Hammond chess Rogers HK poker Ali Liu design chess Zhang
编辑:
我真正需要的是迭代有效循环组结构的方法,并能够构造结果(组/子组/名称).
就像是 :
>对于每个组,打印/输出组名;
>对于组内的每个子组,打印/输出子组名称
>在每个子组内,打印名称.
它将产生上述结果.
解决方法
对于第一种情况:
result = map.groupBy( { it.hobby },{ it.city } )
而对于第二个:
result = map.groupBy( { it.city },{ it.hobby } )
您将最终得到地图中的原始值而不仅仅是名称,但您将能够:
result[ 'poker' ][ 'HK' ].name
得到结果
["Ali","Liu"]
顺便说一句:这个form of groupBy
仅在Groovy 1.8.1之后才可用,所以如果你坚持使用早期版本,这将无效
编辑2
根据您在下面的评论,您可以执行以下操作:
result.each { a,b -> println "$a" b.each { c,d -> println " $c" d.each { println " $it.name" } } }