web-dev-qa-db-ja.com

Groovy .each vs .collect

初心者の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
}
15
Vano

eachは入力をeachに返します。そこでのコードは、it.streetを適切に操作します。したがって、各streetが逆になっている元のリストに戻ります。 collectを使用して、操作されたアイテムを含む新しいリストを作成します。したがって、見かけの結果は同じですが、違いは、新しいコンテナを作成したにもかかわらず、元のコンテナが改ざんされていることです。簡単な経験則:eachは副作用に使用されます(これはあなたの例です)。 collectは何か新しいものを作成するために使用されますが(例:map

26
cfrick