Groovy .each vs .collect

unhi4e5o  于 2023-03-22  发布在  其他
关注(0)|答案(1)|浏览(126)

作为初学者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:dlirehstoR, 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
}
fwzugrvs

fwzugrvs1#

  • each用于副作用(这是您的示例)并返回原始
  • collect用于创建新的东西(例如Java或其他语言中的eager map

在您的示例中:each将输入返回给each。您的代码在适当的位置操作it.street。因此,您将返回原始列表,其中每个street都被反转。使用collect,您将创建一个新的列表,其中包含被操作的项。因此,表面上的结果是相同的,但不同的是,您创建了一个新的容器,但您的原始列表仍然被篡改。

相关问题