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 liudesign London Sharma LA Doe Hammond HKchess London Clark LA Rogers HK Zhang
>团体订单:城市,爱好
London poker Smith Johnson design Sharma chess ClarkLA poker Maradona Waters design Doe Hammond chess RogersHK 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" } }}
这与GVdP在他的回答中的逻辑相同,但我觉得使用groupBy有多个参数,就像我在这里使你的代码更具可读性和明显的意图
总结以上是内存溢出为你收集整理的Groovy:如何按2个不同的标准对地图值进行分组?全部内容,希望文章能够帮你解决Groovy:如何按2个不同的标准对地图值进行分组?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)