Groovy .each vs .collect

时间:2016-04-07 16:19:46

标签: groovy iterator

作为初学者Groovy研讨会的一部分,我们一直在迭代以下列表( fromJson.secrets ):

[[floors:10, street:emaseS, url:http://plywoodpeople.com/wp-content/uploads/2012/03/kermit_the_frog.jpg], [floors:2, street:emaseS, url:http://36.media.tumblr.com/tumblr_lp9bg9Lh2x1r0h9bqo1_500.jpg], [floors:2, street:yawdaorB, url:https://montclairdispatch.com/wp-content/uploads/2013/07/broadway1.jpg], [floors:5, street:emaseS, url:AAA], [floors:2, street:yawdaorB, url:AAA], [floors:6, street:albmaR aL, url:AAA], [floors:1, street:teertS llaW, url:AAA], [floors:6, street:daoR yebbA, url:AAA], [floors:3, street:teertS llaW, url:AAA], [floors:4, street:dlican someone help me to understand the difference between the 2 methods in rehstoR, url:AAA]]

最初的计划是使用.collect,但是看起来好像使用.each生成相同的结果(在列表上迭代......)。

问题是,是否有人可以帮助我理解有关我的用例和一般方法之间的区别

每个

reversed_streets = fromJson.secrets.each {
    it.street = it.street.reverse()
    it
}


收集:

reversed_streets = fromJson.secrets.collect {
    it.street = it.street.reverse()
    it
}

1 个答案:

答案 0 :(得分:25)

each将输入返回到each。你的代码在那里操纵it.street。因此,您将返回原始列表,其中每个street都已反转。使用collect,您可以使用受管理的项目创建新列表。所以显而易见的结果是相同的,但区别在于您创建了一个新容器,但您的原始容器仍然被篡改。一个简单的经验法则:each用于副作用(这是你的例子)。虽然collect用于创建新内容(例如map