Groovy:如何按2个不同的标准对地图值进行分组?
发布时间:2020-12-14 16:31:52 所属栏目:大数据 来源:网络整理
导读:如何按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',
如何按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 编辑2 根据您在下面的评论,您可以执行以下操作: result.each { a,b -> println "$a" b.each { c,d -> println " $c" d.each { println " $it.name" } } } 这与GVdP在他的回答中的逻辑相同,但我觉得使用groupBy有多个参数,就像我在这里使你的代码更具可读性和明显的意图 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |