Используя Stream API, выделить сотрудников, пришедших в выбранном году, и среди них выявить сотрудника с максимальным значением заработной платы

Прохожу сейчас применение stream api, и пишу задачку про сортировку по году поступления на работу и нахождению максимальной з/п в этом самом году. Вот код класса Emoloyee

import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;

public class Employee {

  private String name;
  private Integer salary;
  private Date workStart;

  public Employee(String name, Integer salary, Date workStart) {
    this.name = name;
    this.salary = salary;
    this.workStart = workStart;
  }

  public static List<Employee> loadStaffFromFile(String path) {
    List<Employee> staff = new ArrayList<>();
    try {
      List<String> lines = Files.readAllLines(Paths.get(path));
      for (String line : lines) {
        String[] fragments = line.split("\t");
        if (fragments.length != 3) {
          System.out.println("Wrong line: " + line);
          continue;
        }
        String dateFormat = "dd.MM.yyyy";
        staff.add(new Employee(
            fragments[0],
            Integer.parseInt(fragments[1]),
            (new SimpleDateFormat(dateFormat)).parse(fragments[2])
        ));
      }
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    return staff;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public static Integer getSalary() {
    return salary;
  }

  public void setSalary(int salary) {
    this.salary = salary;
  }

  public Date getWorkStart(int year) {
    return workStart;
  }

  public void setWorkStart(Date workStart) {
    this.workStart = workStart;
  }

  public String toString() {
    return name + " - " + salary + " - " +
        (new SimpleDateFormat("dd.MM.yyyy")).format(workStart);
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    Employee employee = (Employee) o;
    return Objects.equals(name, employee.name) &&
        Objects.equals(salary, employee.salary) &&
        Objects.equals(workStart, employee.workStart);
  }

  @Override
  public int hashCode() {
    return Objects.hash(name, salary, workStart);
  }

}

Вот код класса Main, в котором мне нужно реализовать метод findEmployeeWithHighestSalary(List staff, int year), возвращающий сотрудника с максимальной зарплатой с заданным годом поступления на работу.

import java.util.List;
import java.util.stream.Collectors;

public class Main {

    private static final String STAFF_TXT = "data/staff.txt";

    public static void main(String[] args) {
        List<Employee> staff = Employee.loadStaffFromFile(STAFF_TXT);
        Employee employeeMaxSalary = findEmployeeWithHighestSalary(staff, 2017);
        System.out.println(employeeMaxSalary);
    }

    public static Employee findEmployeeWithHighestSalary(List<Employee> staff, int year) {
        //TODO Метод должен вернуть сотрудника с максимальной зарплатой среди тех,
        // кто пришёл в году, указанном в переменной year

        staff.stream().filter(e -> e.getWorkStart(year)???ну вот как это сделать????);
       
    }
}

Подскажите, как реализовать метод. Где что почитать? Буду очень признательна.

С сортировкой по зп и именам в алфавитном порядке разобралась

public static void sortBySalaryAndAlphabet(List<Employee> staff) {
        //TODO Метод должен отсортировать сотрудников по заработной плате и алфавиту.
        staff.sort((s1, s2) -> {
                if (s1.getSalary().compareTo(s2.getSalary()) == 0) {
                    return s1.getName().compareTo(s2.getName());}
                return s1.getSalary().compareTo(s2.getSalary());
        });
    }

А вот с этим заданием туго((


Ответы (0 шт):