2017-10-24 33 views
1

각 직원 개체의 속성 시작 날짜가있는 Employee 개체 목록이 있습니다. 작업은 가장 빠른 시작 날짜를 가진 직원을 하나만 선택하는 것입니다. Java 8 Predicate를 사용하려고합니다. 기본적으로 어떻게 목록 요소를 술어로 서로 비교할 수 있습니까? Functional 인터페이스에서 lambda를 사용하여 동일한 작업을 수행하려면 어떻게해야합니까?Java 8 요소 속성에 따라 목록에서 요소를 선택하는 데 사용되는 숫자

+2

비교기로 최소/최대 기능을 사용할 수 있습니다. [this one] (https://stackoverflow.com/questions/22561614/java-8-streams-min-and-max-why-does-this-compile#) – GurV

+2

을 보시고 pls를 붙여 넣으시겠습니까? 시도했었다? – Vaseph

답변

1

Java 술어는 술어의 수학적 개념을 기반으로합니다. 술어는 x의 일부 특성에 따라 true 또는 false를 리턴하는 함수 F (x)입니다. 컬렉션을 탐색하는 동안 함수를 재정의 할 수 없다는 것을 감안할 때 일부 Collection의 최소값 또는 최대 값을 찾는 것이 가능한 옵션이 아닙니다.

Java 8을 사용하여 권장되는 방법은 Java 스트림에 포함 된 min 함수를 사용하는 것입니다.

class Employee { 
    private LocalDate startDate; 
} 

생성자와 게터 생략 : 당신을 가정 할

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

는 직원이 있습니다. 다음과 같이 가장 빠른 시작 날짜를 가진 직원을 찾을 수 있습니다.

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