Spockでテストコードを書く時の備忘録。
Consumer : void accept(T)
メソッド
public void method1(List<String> list, Consumer<List<String>> consumer)
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)
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)
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)
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式がそのまま使えるみたいです(このブログを書いた直後に偶然知りました)