Groovy:如何按2个不同的标准对地图值进行分组?

Groovy:如何按2个不同的标准对地图值进行分组?,第1张

概述如何按2个不同的标准地图值进行分组以获得下面的输出? def listOfMaps = [ [name:'Clark', city:'London', hobby: 'chess'], [name:'Sharma', city:'London', hobby: 'design'], [name:'Maradona', city:'LA', hobby: 'poker'], [name:' 如何按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        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个不同的标准对地图值进行分组?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1238103.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存