パターンに一致し、指定された文字列を含む名前のすべてのファイルを検索するためのクロージャーがあります。
def path = "path/to/logs"
def namePatten = ~/.*.log/
def contentPattern ~/.*ERROR.*/
def result = []
new File(path).eachDirRecurse { File dir ->
dir.eachFileMatch(namePattern) { File f ->
f.eachLine { String l ->
if(l.matches(contentPattern)) {
result.add(f)
return
}
}
}
しかし、私はもっと短いものを使用できると確信しています(ねえ、そうでなければプレーンJavaを使用できます:))
私はこれを少しそのように書く方法を見つけようとしました:
result = new File(path).eachFileRecurse.filter(filePattern).grep(contentPattern)
guavaまたは同様の流暢なインターフェース収集ツールを使用して行ったように。
このクロージャーを簡潔でありながら読みやすい方法で書くのはどれほど難しいですか?