関数型インタフェースのPredicateをご存じでしょうか?
そもそも「関数型インタフェースってなんだ?」という方もいるかもしれません。
関数型インタフェースがよくわからないという方向けに簡単に解説しておくと、「みんながよく使いそうな機能を事前に定義しておいてくれたインタフェース」というものです。
何度も使用する関数を毎回一から作成しては面倒ですし、時間がもったいないです。
関数型インタフェースがあることでそういった問題も一発で解決することができます。
また関数型インタフェースではラムダ式というものを使用しますが、これを使用することで見やすいコードとなります。
なので後からコード修正が入ったとしても、短時間で修正が可能となるメリットも存在します。
このような特徴のある関数型インタフェースの一つであるPredicateと、Predicateの拡張版のようなBiPredicateについてこの記事では解説していきます。
Predicateとは?
では初めにPredicateについて解説していきます、
Predicateは引数を一つ受け取り、戻り値をBoolean型(trueまたはfalse)で戻すインタフェースの事です。
そして関数型インタフェースには1つ抽象メソッドが定義されていますが、Predicateに定義されているのはtestメソッドとなります。
今までご紹介してきたSupplierやConsumerに比べたら分かりやすい機能となっています。
そして実際の使用例は下記の通りとなっています。
【コード】
import java.util.function.Predicate;
public class Predicate1 {
public static void main(String[] args) {
Predicate<Integer> pre=a -> a>100;
System.out.println(pre.test(120));
System.out.println(pre.test(90));
}
}
【実行結果】
true
false
上記コードはInteger型の引数を受け取るPredicate型の変数preを作成し、メソッドを使用して120と90を引数として渡しています。
変数preには引数として渡された値が100よりも大きいかどうかを判断する式を記載しています。
120を引数として渡した際は120>100が成り立つためtrueが戻されて、90を渡した際は90>100と成り立たなくなるため、falseが戻り値として返却されます。
Predicateの機能は以上となります。
BiPredicateとは?
ではBiPredicateについて今度は解説していきます。
BiPredicateはPredicateの機能とほぼほぼ変わりません。
ただ引数として渡す値が2つになるという変化はありますが、戻り値がBoolean型であることやメソッドがtestであることは同様です。
実際にコードとして記載すると下記のようになります。
【コード】
import java.util.function.BiPredicate;
public class BiPredicate1 {
public static void main(String[] args) {
BiPredicate<Integer,String> bp=(a,b) -> a<b.length();
System.out.println(bp.test(12, "この文字は12文字以上でしょうか?"));
System.out.println(bp.test(32, "この文字は32文字以上でしょうか?"));
}
}
【実行結果】
true
false
上記コードは引数としてInteger型、String型を与えるBiPredicate型の変数bpを作成しています。
そしてそこでは与えられた引数1(Integer型)の数値よりも引数2(String型)で与えられた文字列の文字数が大きいかどうかを判断しています。
そして1回目にラムダ式が呼び出された時は、12という数値と「この文字は12文字以上でしょうか?」という文字列を与えていて、「この文字は12文字以上でしょうか?」は17文字のため12文字以上ということで結果はtrueが返されます。
2回目にラムダ式を呼び出された際は32という数値と「この文字は32文字以上でしょうか?」という文字列を与えていて、文字数は17文字のため結果はfalseを返却しています。
BiPredicateはこのように使用しています。
まとめ
この記事ではJavaの関数型インタフェースPredicateとBiPredicateについて解説してきました。
- Predicateとは?
- BiPredicateとは?
Predicateは引数を1つ渡し、戻り値をBoolean型で戻す関数型インタフェースで、BiPredicateは引数を2つ渡し、戻り値はPredicateと同様のBoolean型で戻すという特徴があります。
以前紹介したSupplierやConsumerに比べて分かりやすい関数型インタフェースとなっています。
なのでPredicateは引数を渡して、何かの判断をしてくれる関数型インタフェースと覚えておけば大丈夫だと思います。
BiPredicateもPredicateを覚えてしまえば、ほぼ同じ機能ですので自然と理解することができます。
以上で今回の解説は終了となります。
コメント