如何按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" } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。