「指定範囲内の日付をランダムに取得」をGroovyでやってみた

最初は軽い気持ちだったんです、 そしたら何故か深い所に連れて行かれてました。
2
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

@fumokmm @kimukou_26 @xnrghzjh あー、shuffleってメソッドがあるんですねー。Dateのレンジからコレクションにするところまでは書いていたんですけど、そこからどうしていいかわからなかったですw

2011-06-09 19:15:12
ふも @fumokmm

@kyon_mm @kimukou_26 @xnrghzjh shuffleはJava標準なんですが、便利なんで私はよく使ってます。一回シャッフルしとけば、順繰りに取得してもランダムになりますねそういえば。

2011-06-09 22:01:19
close_yutori @kimukou2628

@fumokmm あれ?@ky0takaさんがGroovyDice使った例Gistに上げてませんでしたっけ? それ使えます? RT @kyon_mm @xnrghzjh shuffleはJava標準。一回シャッフルしとけば、順繰りに取得してもランダムになりますねそういえば。

2011-06-09 22:28:01
ふも @fumokmm

@kimukou_26 @ky0taka @kyon_mm @xnrghzjh GroovyDiceは私は使ったことないんでよくらからないです!すいません。

2011-06-09 22:35:46
まちのシステム屋さん(揺れる重い) @xnrghzjh

当初の面影が残っていない、もう何がなんだか... そしてJodaTimeが要らなくなっている。 勉強になります。 QT @fumokmm @kimukou_26 @kyon_mm metaClass版 http://goo.gl/oLMNn

2011-06-09 23:56:07
まちのシステム屋さん(揺れる重い) @xnrghzjh

となると @kyon_mm さんのコードは重複あり版 @fumokmm さんのコードは重複無し版として使い分けが出来るということになるわけか、前者はパチンコ的なものに、後者はトランプ的なものに。

2011-06-10 00:12:40
ふも @fumokmm

. @xnrghzjh @kimukou_26 @kyon_mm ええそうですね。Collectionsは有用なクラスです。

2011-06-10 00:03:03

最終的にこうなった2

// 範囲内ランダム
ObjectRange.metaClass.randomeChoice = {
 delegate.toList().with {
  Collections.shuffle(it); it
 }.head()
}

// 変換
def toDate = { Date.parse('yyyy-MM-dd', it) }
def toDateStr = { it.format('yyyy-MM-dd') }

// 日付の範囲
def dateRange = toDate('1978-09-30')..toDate('2011-10-10')

// デモ!
5.times { println toDateStr(dateRange.randomeChoice()) }