本家はこちら
Javaのよく使ってる関数インターフェース群をまとめようかとおもう。
現場ごとに説明のためのドキュメントを書くのがしんどくなってきたからというのが本音かも。
predicate
断言するって意味。戻り値はBoolean。 引数1つとって
Predicate<String> matchA = s -> s.matches(".*a.*"); // 'a'があればtrue
Predicate<String> matchB = s -> s.matches(".*b.*"); // 'b'があればtrue
Predicate<String> noA = matchA.negate(); // 'a'があったらfalse
// 合成
Predicate<String> ab = matchA.and(matchB); // 'a'と'b'があったらtrue
Predicate<String> ab = matchA.or(matchB); // 'a'または'b'があったらtrue
実行はtest(T)
でできる。カンタン。streamのfilterとかで使える。テストもカンタン。
matchA.test("a");
これで実行できる。
ちなみに2つ引数とることもできる
BiPredicate<String,String> matchAB = (s,t) -> s.matches(".*a.*") && t.matches(".*a.*");
suppplier
供給するって意味
引数なし、戻り値あり。引数ないけど、それ単体で何かが発生する。 なにかと組み合わせてデータ流す感じかな
Supplier<String> supplier = () -> {
SecureRandom random = new SecureRandom();
return String.valueOf(random.nextInt());
};
ランダムintを返却する
supplier.get()
consumer
消費するって意味。 実際に引数とって、そのあと処理する。戻り値なし。
下記のような感じ
Consumer<String> show = s -> System.out.println(s);
下記のように使う
s.accept("s");
2つ引数とることも可能
BiConsumer<String,Integer> biShow = (s,i) -> {
System.out.println(s);
System.out.println(i);
};
Function
機能として使える関数インターフェース
引数と戻り値を持てる。 引数2つまで持てるものもある。(BiFunction)
下記のように定義できる
Function<Integer,String> exchangeString = t -> String.valueOf(t);
BiFunction<Integer,Integer,String> biExchange = (t,u) -> String.valueOf(t + u);
下記のように使える
exchangeString.apply(1);
biExchange.apply(1,2);