Используя 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());
});
}
А вот с этим заданием туго((