Groovyでリスト内包表記
はじめに
Groovyにはリスト内包表記が無いなぁと思って書いてみた。
ソース(参照)
def listComprehension(list, filter, expr) { list.findAll(filter).collect(expr) } println listComprehension( (0..10).toList(), // 0から10までのリストを渡して {it % 2 == 0}, // 偶数にフィルタして {"<${it * 3}>"} // <数字> みたいにフォーマットした3倍の値を出力! )
みたいな感じで書きますと、
[<0>, <6>, <12>, <18>, <24>, <30>]
みたいになります。ジェネレータを複数にするとか面倒なことはしてません。とりあえず。
追記 (2011-07-02)
Groovyでリスト内包表記(その2) - No Programming, No Life にて複数ジェネレータ、複数フィルターに対応してみました。
だが、
println( (0..10).toList().findAll{ it % 2 == 0 }.collect{ "<${it * 3}>" } )
で、いい気がする。
結論
findAllとcollectを駆使すればGroovyにはリスト内包表記は要らない!*1
*1:かもしれない。