class Employee { int id; String name; int age; String gender; String department; int yearOfJoining; double salary; public Employee(int id, String name, int age, String gender, String department, int yearOfJoining, double salary) { this.id = id; this.name = name; this.age = age; this.gender = gender; this.department = department; this.yearOfJoining = yearOfJoining; this.salary = salary; } public int getId() { return id; } public String getName() { return name; } public int getAge() { return age; } public String getGender() { return gender; } public String getDepartment() { return department; } public int getYearOfJoining() { return yearOfJoining; } public double getSalary() { return salary; } @Override public String toString() { return "Id : "+id +", Name : "+name +", age : "+age +", Gender : "+gender +", Department : "+department +", Year Of Joining : "+yearOfJoining +", Salary : "+salary; } } List<Employee> employeeList = new ArrayList<Employee>(); employeeList.add(new Employee(111, "Jiya Brein", 32, "Female", "HR", 2011, 25000.0)); employeeList.add(new Employee(122, "Paul Niksui", 25, "Male", "Sales And Marketing", 2015, 13500.0)); employeeList.add(new Employee(133, "Martin Theron", 29, "Male", "Infrastructure", 2012, 18000.0)); employeeList.add(new Employee(144, "Murali Gowda", 28, "Male", "Product Development", 2014, 32500.0)); employeeList.add(new Employee(155, "Nima Roy", 27, "Female", "HR", 2013, 22700.0)); Optional<Employee> emp = employeeList.stream() .collect(Collectors.maxBy(Comparator.comparingDouble(Employee::getSalary)));Después de ordenar la lista según el salario en orden inverso, puede omitir el más alto con skip(1) y luego obtener el primer empleado después de eso con el método findFirst() para encontrar el segundo salario más alto.
Prueba esto:
Optional<Employee> emp = employeeList.stream() .sorted(Comparator.comparingDouble(Employee::getSalary).reversed()).skip(1).findFirst(); System.out.println(emp.get());Producción:
Id : 111, Name : Jiya Brein, age : 32, Gender : Female, Department : HR, Year Of Joining : 2011, Salary : 25000.0necesita ordenar la lista, luego obtener el segundo (el índice de la lista comienza desde 0).
1.
List<Employee> sortedList = employeeList.stream() .sorted(Comparator.comparingDouble(Employee::getSalary).reversed()).collect(Collectors.toList());sortedList.get(1)