2017-10-24 23 views
1

各Employeeオブジェクトにはプロパティの開始日があります。 タスクは、最も早い開始日を持つ従業員を1人だけ選択することです。 私はこれにJava 8 Predicateを使用しようとしています。 基本的にどのように述語でリスト要素を互いに比較できますか? また、lambdaをFunctionalインターフェイスで使用して同じことを行う方法はありますか?要素のプロパティに基づいて一覧から要素を選択するためのJava 8述語

+2

コンパイラーで端末機能を使用できます。 [this one](https://stackoverflow.com/questions/22561614/java-8-streams-min-and-max-why-does-this-compile#) – GurV

+2

をご覧ください。試しました? – Vaseph

答えて

1

Java述語は、述語の数学的概念に基づいています。述語は、xのいくつかのプロパティに基づいて真または偽を返す関数F(x)です。コレクションをトラバースしている間に関数を再定義することはできないので、おそらくコレクションの最小値または最大値を見つけるための選択肢ではありません。

Java 8を使用する場合は、Javaストリームに含まれるmin関数を使用することをお勧めします。あなたは従業員を持っていると仮定すると

Employee oldestEmployee = employees.stream().min(Comparator.comparing(Employee::getStartDate)).get() 
1

class Employee { 
    private LocalDate startDate; 
} 

をコンストラクタとゲッターは省略されています。最も早いstartDateを持つ従業員は、次のように見つけることができます。

Optional<Employee> min = list.stream() 
      .min(Comparator.comparing(Employee::getStartDate)); 
関連する問題