2017-10-24 2 views
1

Es gibt eine Liste Mitarbeiterobjekte, jedes Mitarbeiterobjekt hat das Startdatum der Eigenschaft. Aufgabe ist es, nur einen Mitarbeiter auszuwählen, der das früheste Startdatum hat. Ich versuche, Java 8 Predicate dafür zu verwenden. Also im Grunde, wie kann ich Listenelemente im Prädikat miteinander vergleichen? Und wie kann ich das Gleiche mit Lambda mit Functional interface tun?Java 8 Prädikat zur Auswahl eines Elements aus einer Liste basierend auf Elementeigenschaften

+2

Sie können die Terminalfunktion - min/max mit Ihrem Komparator verwenden. Werfen Sie einen Blick auf [dieses] (https://stackoverflow.com/questions/22561614/java-8-streams-min-and-max-why-does-this-compile#) – GurV

+2

könnten Sie bitte hier einfügen, was Sie habe versucht? – Vaseph

Antwort

1

Java-Prädikate basieren auf dem mathematischen Konzept eines Prädikats, das eine Funktion F (x) ist, die basierend auf einigen Eigenschaften von x wahr oder falsch zurückgibt. Da die Funktion beim Überqueren der Sammlung nicht neu definiert werden kann, handelt es sich wahrscheinlich nicht um die Option zum Auffinden des Minimums oder Maximums einer Sammlung.

Eine empfohlene Vorgehensweise mit Java 8 wäre die Verwendung der Funktion min in Java Streams.

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

Sie Gesetzt haben Mitarbeiter:

class Employee { 
    private LocalDate startDate; 
} 

Constructor und Getter weggelassen. Sie finden den Mitarbeiter mit dem frühesten Startdatum wie folgt:

Optional<Employee> min = list.stream() 
      .min(Comparator.comparing(Employee::getStartDate)); 
Verwandte Themen