Groovyでファイルツリーを巡り、最初に見つかったファイルを返却するメソッド書いたよ
はじめに
GroovyにDirectory.EnumrateFiles("hogeDir").First()みたいなのってあったっけ?
@kyon_mm @kimukou_26 new File('hogeDir').listFiles({it.isFile()} as FileFilter).first() とか?
2011-09-10 12:35:24 via YoruFukurou to @kyon_mm
@fumokmm @kimukou_26 C#のは全てを読み込まずに最初のものだけ読み込む感じです。例としては10万ファイルあるときに速度差がでてくるっていう。
あーなるほど…遅延評価か。
困ったときのJava7
Java7のNIO2できっとそういうのがあるはずだ!と思って調査してたらありました。
Walking the File Tree (The Java™ Tutorials >
Essential Classes > Basic I/O)
で
これを実装しようかなと思ってコードを書いてる最中に、FileVisitResultってクラスがありまして、こいつはパッケージがjava.nio.fileなんですが、IntelliJ君が、その名前のクラスならgroovy.ioにもあるよと教えてくれた。
え!?これはもしやと思い調べてみたらドンピシャなメソッドがGDKに見つかりました。
File#traverse(Map, Closure)
なんとSince v1.7.1からだそうで。見逃してた。
ひとまず書いてみた
元々実現しようとしていた遅延評価ってわけじゃないですが、見つかったらすぐTERMINATEできるから目的は達成できてるかな。やろうと思えば遅延リストを作成して返却すればいいわけだし。
おわりに
やっぱりGroovy便利だわ。Mapとクロージャで条件を指定できたり、処理を書けたりするんですもの。Groovyはv1.7.1の時点でJava7を凌駕していたわけですね。