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)));
按照薪资倒序对列表进行排序后,可以用
skip(1)
跳过最高的,然后用findFirst()
方法找到之后的第一个员工,找到第二高的薪资。
试试这个:
Optional<Employee> emp = employeeList.stream()
.sorted(Comparator.comparingDouble(Employee::getSalary).reversed()).skip(1).findFirst();
System.out.println(emp.get());
输出:
Id : 111, Name : Jiya Brein, age : 32, Gender : Female, Department : HR, Year Of Joining : 2011, Salary : 25000.0
您需要对列表进行排序,然后得到第二个(列表索引从0开始)。
1.
List<Employee> sortedList = employeeList.stream()
.sorted(Comparator.comparingDouble(Employee::getSalary).reversed()).collect(Collectors.toList());
sortedList.get(1)
Map<String, Integer> emp = employeeList.stream()
.collect(Collectors.groupingBy(Employee::getDepartment)).entrySet().stream().collect(Collectors.toMap(entry-> entry.getKey(),
entry->entry.getValue().stream().sorted(Comparator.comparingInt(Employee::getSalary).reversed())
.skip(1).findFirst().map(Employee::getSalary).orElse(0)));