デフォルトで提供されている関数型インターフェースについて
ストリームAPIを使う際にあまりにもデフォルトで提供されている関数型インターフェ
ースが使われているためそれぞれのふるまいについて書いておこうかなと・・・・
そもそも関数型インターフェースとは
抽象メソッドが一つしかないインタフェースなのですが・・
例えば
public class Main{ public static void main(String[] args){ String val = "a"; Function f= (val) -> { System.out.println(val); }; f.test("b"); } interface Function { void test(String val); }
この場合Functionインターフェースがそれに当たりますね。
また、Javaのutilパッケージにはあらかじめ関数型インターフェースが提供されており
インポートすることで使えるようになりますが・・・
最初はそんなもん自分で作るからいらないじゃんとか思ってたけど・・・・
ストリームAPIとかJavaの公式APIのほうでばんばん使うからあらかじめ提供されなきゃあかんかーと思いました・・・・w
肝心のデフォルトで提供されている関数型インターフェースですが・・・
表にしてみました
関数型インターフェース | 抽象メソッド |
---|---|
Function<T,R> | R apply(T u) |
BitFunction<T,U,R> | R apply(T t, U u) |
Consumer<T> | void accept(T t) |
Predicate<T> | boolean test(T t) |
BiPredicate<T,U> | boolean test(T t,U u) |
Supplier<T> | T get() |
UnaryOperator<T> | T apply(T t) |
BinaryOprerator<T> | T apply(T t1,T t2) |
たぶん中身はこんなかんじかなぁ?
interface Function<T,R>{
R apply(T t)
}
使い方については・・・
public class Main{ public static void main(String[] args){ String val = "a"; Predicate p= val -> val.equals(a) boolean f = p.test(val); System.out.println(f); } }
これでtrueがかえってくるはず・・・・
結構書くの疲れました・・・・w
ではでは ٩(๑•̀ω•́๑)۶