CLOVER🍀

That was when it all began.

GroovyとJava 8とClosureと

あんまり気にしていなかったんですが、Twitter見ててふと引っかかって。

Groovyって、Java 8のLambda式が渡せるところに、GroovyのClosureを渡せるんですね。

Official support for running Groovy on JDK 8
http://groovy.codehaus.org/Groovy+2.3+release+notes#Groovy2.3releasenotes-OfficialsupportforrunningGroovyonJDK8

せっかくなので、試してみました。

import java.util.stream.IntStream

IntStream
  .rangeClosed(1, 10)
  .filter { e -> e % 2 == 0 }
  .map { it * 2 }
  .forEach { e -> println(e) }

結果。

4
8
12
16
20

へぇ〜。

他のパターンも、一応。

import java.util.stream.IntStream

def even = { e -> e % 2 == 0 }
def doubling = { e -> e * 2 }
def show = { println(it) }

IntStream
  .rangeClosed(1, 10)
  .filter(even)
  .map(doubling)
  .forEach(show)

こんなのも。

import java.util.stream.IntStream

def even(i) {
  i % 2 == 0
}

def doubling(i) {
  i * 2
}

def show(i) {
  println(i)
}

IntStream
  .rangeClosed(1, 10)
  .filter(this.&even)
  .map(this.&doubling)
  .forEach(this.&show)

なるほど、覚えておきましょう。