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