関数型インターフェースのPredicate<T>の使いどころについて以下のような場合が挙げられるようです。
Predicateを用いて説明用変数を導入し、処理内容を分かりやすくできます。
Type.java
public enum BloodType{ //血液型を表すEnumクラス
A,B,AB,O;
}
Patient.java
public class Patient{ //患者を表すクラス
private BloodType bType;
private int age;
public Patient(BloodType bType, int age){
this.bType = bType;
this.age = age;
}
//getter類は省略
}
Predicateを使用しない場合
Main.java
public class Main{
public static void main(String[] args){
Patient p = new Patient(BloodType.A, 21);
//血液型がAで、かつ、年齢が18歳以上の患者の場合、処理を実行
if(p.getBType().equals(BloodType.A) && p.getAge() >= 18){
//処理内容
}
}
}
Predicateを使用した場合
Main.java
public class Main{
public static void main(String[] args){
Patient p = new Patient(BloodType.A, 21);
//説明用変数を宣言
Predicate<Patient> isA = p -> getBType().equals(BloodType.A);
Predicate<Patient> isAdult = p -> getAge() >= 18;
//説明用変数を用いた評価式
if(isA.and(isAdult).test(p)){
//処理内容
}
}
}
好みはわかれるかもしれませんが、確かに評価式をパッと見た感じPredicateを使用した方がわかりやすそうではありますね。
ただ、これくらいのコード量だと、使わなくてもいいかもしれません。
使いどころがありそうなのでメモしておきました。
間違っている箇所があれば教えてください。