Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to find second highest salary in below array list using Java8 streams [closed]

Tags:

java

java-8

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)));
like image 908
Abinash Dash Avatar asked Jan 26 '26 22:01

Abinash Dash


2 Answers

After sorting the list according to salary in reverse order, you can skip the highest with skip(1) then get the first employee after that with findFirst() method to find the second highest salary.

Try this:

Optional<Employee> emp = employeeList.stream()
        .sorted(Comparator.comparingDouble(Employee::getSalary).reversed()).skip(1).findFirst();

System.out.println(emp.get());

Output:

Id : 111, Name : Jiya Brein, age : 32, Gender : Female, Department : HR, Year Of Joining : 2011, Salary : 25000.0
like image 146
Hülya Avatar answered Jan 28 '26 12:01

Hülya


you need to sort the list, then get 2nd (list index starts from 0).

1.

List<Employee> sortedList = employeeList.stream()
.sorted(Comparator.comparingDouble(Employee::getSalary).reversed()).collect(Collectors.toList());
  1. sortedList.get(1)
like image 27
Steve Nash Avatar answered Jan 28 '26 10:01

Steve Nash