◆ Java
前回で「ラムダ式」の基本について学習しました。
「関数型インタフェース」を用意して、その実装を書いて、それを呼び出すという形ですが、ラムダ式で記述すると、メソッド名も何でもよく、必要なのはインタフェースに渡す引数の型のみ。
そう考えると、「関数型インタフェース」は、「引数の数と型、戻り値の型」があっていれば何でも良いということになります。
そのためか、Java SEでは、よく使うだろう一般的なパターンの関数型インタフェースが用意されています。
★ Runnable インタフェース
- 抽象メソッド: run( )
- 引数:なし
- 戻り値:なし (void)
★ Consumer インタフェース
- 抽象メソッド: accept (T t)
- 引数:1つ
- 戻り値:なし (void)
★ BiConsumer インタフェース
BiConsumer (Java Platform SE 8)
- 抽象メソッド: accept (T t, U u)
- 引数:2つ
- 戻り値:なし (void)
★ Predicate インタフェース
Predicate (Java Platform SE 8)
- 抽象メソッド: test (T t)
- 引数:1つ
- 戻り値:boolean型
★ BiPredicate インタフェース
BiPredicate (Java Platform SE 8)
- 抽象メソッド: test (T t, U u)
- 引数:2つ
- 戻り値:boolean型
もっと複雑な引数や戻り値の組み合わせの関数型インタフェースが必要になった場合は、自前で適当に用意すればよいので、大した問題でもないですが、上記のようなものは覚えておいても損ではないですね。
Consumer<String> c0 = (s) -> System.out.println("test:" + s);
c0.accept("c0");
Consumer<Float> c1 = (j) -> System.out.println(j);
c1.accept(4000f);
BiConsumer <Integer, Integer> bc0 = (k,l) -> System.out.println(k*l);
bc0.accept(500, 800);
BiConsumer <Integer, String> bc1 = (m,n) -> {
System.out.println(n + ":"+ m.toString());
};
bc1.accept(500, "XYZ");
Predicate<String> p1 = (s1) -> s1.equals("AAA");
if(p1.test("BBB")){
System.out.println("YES");
} else {
System.out.println("No");
}
このあたり、当時、妥協せずやっておけばよかったです。
わかってしまえば全然難しい内容ではなかったですので…。