No Programming, No Life

プログラミング関連の話題や雑記

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:かもしれない。