はじめに
関数型インターフェースの1つPredicatetインターフェースをご存知でしょうか。
predicateインターフェースとラムダ式を組み合わせれば、複雑な条件をシンプルに実装できてしまいます。そんなPredicateインターフェースとおまけにBiPredicateインターフェースを解説していきます。
Predicatetとは?
Predicateを日本語に訳すと「断定する」という意味になります。言葉の通り、引数を通して何らかの判断をする処理を定義するためのものです。例えば、戻り値がboolean型の処理をラムダ式で変数に代入して簡単に呼び出せるようにできます。Predicateはtestメソッドを持っています。そのメソッドは引数を1つ受け取り、その引数を使って、その結果をboolean型で戻します。サンプルコードを通して使い方を説明していきます。
どうやって使うの?
サンプルコードでは理想の男性を絞るためにMainクラスでif文を使って絞り込んでいきます。
public class Man {
private int hight;
private int income;
private String looks;
private int age;
public Man(int hight, int income, String looks, int age) {
this.hight = hight;
this.income = income;
this.looks = looks;
this.age = age;
}
public int getHight() {
return hight;
}
public int getIncome() {
return income;
}
public String getLooks() {
return looks;
}
public int getAge() {
return age;
}
}
普通にif文を使用すると複雑な文になってしまいます。
Man man = new Man(170,900,"hot",20);
if(getHight > 170 && getIncome > 800||
getLooks == hot && age <30){
}
それを解消するためにPredicateインターフェースを利用します。
下記のコードはPredicateオブジェクトを組み合わせた論理演算を実行しています。
import java.util.function.Predicate;
public class Main {
public static void main (String[] args) {
Predicate<Man> isHight = m -> m.getHight() > 170;
Predicate<Man> isIncome = m -> m.getIncome()<1000;
Predicate<Man> isLooks = m -> m.getLooks()=="hot" ;
Predicate<Man> isAge = m ->m.getAge()<35;
Predicate<Man> type = isHight.and(isIncome).or(isLooks.and(isAge));
Man man = new Man(170,900,"hot",20);
if(type.test(man)) {
System.out.println("OK");
}else {
System.out.println("NG");
}
}
}
BiPredicateとは?
Predicateは引数を1つ受け取るのに対してBiPredicateは2つの引数を受け取って何らかの判断をする処理を記述します。Predicateメソッドを同じくtestメソッドを持ちます。
どのように使うの?
サンプルコードを通して説明していきます。
下記のコードはBiPredicateは2つのString型を受け取り、変数strがsuffixで終わっているかをendsWithを利用して判定しています。
import java.util.function.BiPredicate;
public class Sample {
public static void main(String[] args) {
BiPredicate<String, String> b=
(str, suffix) -> str.endsWith(suffix);
System.out.println(b.test("sample.class", ".class"));
}
}
まとめ
Predicateは1つの引数を通して何らかの判断をする処理を定義するためのものです
BiPredicateは2つの引数を受け取って何らかの判断をする処理を記述します