Java8のLambda式とGroovy

Spockでテストコードを書く時の備忘録。

Consumer : void accept(T)

メソッド

public void method1(List<String> list, Consumer<List<String>> consumer)

Java

hoge.method1(foo, list -> list.add("aaa"));

Groovy

hoge.method1(foo, { list -> list.add('aaa') })

Predicate : boolean test(T)

メソッド

public void method2(String text, Predicate<String> predicate)

Java

hoge.method2("test", s -> s.length() < 5);

Groovy

hoge.method2('test', { s -> s.length() < 5 }) // size() でもOK

Supplier : T get()

メソッド

public void method3(Supplier<String> supplier)

Java

hoge.method3(() -> "test");

Groovy

hoge.method3({ 'aaa' }) // -> 'aaa'
hoge.method3({ -> 'bbb' }) // -> 'bbb'

Function : R apply(T t)

メソッド

public void method4(String text, Function<String, String> function)

Java

hoge.method4("abcde", s -> s.toUpperCase()); // -> "ABCDE"
hoge.method4("abcde", String::toUpperCase); // -> "ABCDE"

Groovy

 hoge.method4('abcde', { s -> s.toUpperCase() }) // -> 'ABCDE'

ちなみに、Groovy2.6からは、オプションとして -Dgroovy.antlr4=true を指定すると、GroovyでもLambda式がそのまま使えるみたいです(このブログを書いた直後に偶然知りました)