Java述語例–述語フィルタ
数学では、述語は一般的にブール値関数'P: X? {true, false}'
であると理解されており、X上の述語と呼ばれています。 これは、true
またはfalse
のいずれかの値を返す演算子または関数と考えることができます。
Java8述語の使用法
Java8では、Predicateは関数型インタフェースであるため、ラムダ式またはメソッド参照の代入ターゲットとして使用できます。 だから、あなたが思うところで、私たちは日々のプログラミングでこれらの真/偽の戻り関数を使うことができますか? 評価がtrueまたはfalseのいずれかになるように、同様のオブジェクトのグループ/コレクションの条件を評価する必要がある場所であれば、述語を使用で
たとえば、これらのリアルタイムusecasesでprdicatesを使用することができます
- 特定の日付
- ピザは、特定の時間
- 特定の年齢よりも大きい従業員などを注文した後に生まれたすべての子を検索します。.Java述語クラス
だから、java述語は興味深いもののようです。 もっと深く行こう
私が言ったように、
Predicate
は機能的なインターフェイスです。 これは、述語が期待される場所にラムダ式を渡すことができることを意味します。 たとえば、そのようなメソッドの1つは、Stream interfaceからのfilter()
メソッドです。ストリームは、順次および並列集計操作をサポートする要素のシーケンスを作成するメカニズムとして想定できます。 これは、ストリームに存在するすべての要素をいつでも収集して、一度の呼び出しでいくつかの操作を実行できることを意味します。
だから、本質的に我々はstreamとpredicateを使用することができます–
- 最初にグループから特定の要素をフィルタリングし、
- 次に、フィルタリングされた要素に対していくつかの操作を実行します。
コレクションの述語を使用して
実証するために、以下のように
Employee
クラスがあります。1。 男性であり、年齢以上のすべての従業員21
public static Predicate<Employee> isAdultMale() { return p -> p.getAge() > 21 && p.getGender().equalsIgnoreCase("M");}
2. 女性であり、年齢以上のすべての従業員18
public static Predicate<Employee> isAdultFemale() { return p -> p.getAge() > 18 && p.getGender().equalsIgnoreCase("F");}
3. 年齢が特定の年齢を超えているすべての従業員
public static Predicate<Employee> isAgeMoreThan(Integer age) { return p -> p.getAge() > age;}
必要なときにそれらの多くを構築することができます。 これまでのところとても良い。 上記の方法を使用して、上記の3つの方法をEmployeePredicatesに含めました。java:
java述語フィルタを表示するための別のユーティリティメソッドfilterEmployees()を作成しました。 基本的には、コードをきれいにし、反復性を低くすることです。 Builder patternのように、複数の述語を記述して述語チェーンを作成することもできます。
したがって、この関数では
employees
のリストを渡し、述語を渡すと、この関数はパラメータ述語に記載されている条件を満たすemployees
の新しいコレクションを返述語はJava8では本当に非常に良い追加であり、私はチャンスを得るたびにそれを使用するつもりです。
Javaでの述語に関する最終的な考え8
- 彼らはあなたの条件(時にはビジネスロジック)を中央の場所に移動します。 これは、それらを個別に単体テストするのに役立ちます。
- 任意の変更は、複数の場所に複製する必要はありません。 Java predicateはコードの保守を改善します。
- “filterEmployees(employees,isAdultFemale())”などのコードは、if-elseブロックを書くよりも非常に読みやすいです。